javascript
  • html
  • parameter-passing
  • 2011-05-18 129 views 4 likes 
    4

    我想在javascript中傳遞一個變量。我以下面的方式創建一個鏈接,一切似乎都在工作。傳遞變量Javascript

    label.innerHTML = '<a href="#" onclick="show_box(this);"> link</a>'; 
    

    然而,當我創建以下列方式的鏈接,該鏈接也將通過相關的對象,我從螢火蟲出現以下錯誤 - >「失蹤]之後元素列表」

    label.innerHTML = '<a href="#" onclick="show_box(this,'+object+');"> link</a>'; 
    

    是這是將對象傳遞給函數的可接受方法。問題是我正在一個函數內創建這個鏈接。該函數根據傳遞給它的對象創建這樣的鏈接。所以我不能把這個「對象」當作全局範圍。

    回答

    7

    您正在通過將字符串混合在一起來構建腳本,因此,您只能使用字符串並且object將自動字符串化。

    改爲使用DOM。

    var link = document.createElement('a'); 
    link.href = "#"; // Have a more sensible fall back for status bar readers and middle clickers 
    link.appendChild(document.createTextNode(' link'); 
    link.addEventListener('click',function() { show_box(this, object); },false); 
    label.appendChild(link); 
    

    ...但是使用一個抽象出某些瀏覽器具有的非標準事件模型的庫。

    +0

    +1,只有這樣! – 2011-05-18 17:34:54

    +0

    這種方法被稱爲[Unobtrusive Javascript](http://en.wikipedia.org/wiki/Unobtrusive_JavaScript)。 [jQuery](http://jquery.com/)是一個非常流行的框架,可以從瀏覽器中抽象出非標準事件模型。 – namuol 2011-05-18 17:36:28

    +0

    儘管jQuery很笨重,但[這裏有一些替代方法](http://microjs.com/#events) – Quentin 2011-05-18 17:37:32

    0

    如果你的對象是像數字或字符串變量這樣簡單的變量,那麼它會好的,但是如果你傳遞的是html對象,它將不起作用,因爲它會像下面那樣。

    <a href="#" onclick="show_box(this,[object HTMLDivElement]);"> link</a> 
    
    1

    你要做的是將object的內容傳遞給輸出。由於它是一個對象,因此字符串表示形式將類似[object Object]。輸出的HTML如下所示:

    <a href="#" onClick="show_box(this, [object Object]);">link</a> 
    

    這是無效的。不要試圖連接對象,只需將它作爲函數的另一個參數傳遞,如this。或者,更好的是,使用jQuery:

    <!-- somewhere in the head, or at least after the object is defined --> 
    <script type="text/javascript"> 
    $(function() { 
        $('#thelink').click(function() { show_box(this, object); }); 
    }); 
    </script> 
    
    ... 
    
    <a href="#" id="thelink">link</a> 
    
    相關問題