2011-11-26 129 views
1
function createListItem(text1) { 
    var link = document.createElement("a"); 
    var text = text1; 
    link.setAttribute("name", text); 
    link.setAttribute("href", "javascript:updateLevel1(text)"); 
    //link.setAttribute("onclick", "updateLevel1()"); 
    var list_item = document.createElement("li"); 
    var list_text = document.createTextNode(text); 
    list_item.appendChild(list_text); 
    link.appendChild(list_item); 
    return link; 
} 

function updateLevel1(text) { 
    clearNavFrame2(); 
    var link = document.createElement("a"); 
    link.setAttribute("name", text); 
    link.setAttribute("href", "javascript:updateLevel1(text)"); 
    link.appendChild(document.createTextNode(text)); 
    document.getElementById("navigation_frame1").appendChild(link); 
} 

這裏我想傳遞對象文本到函數updateLevel1當我動態創建一個HTML鏈接,但不幸的是上面的代碼不工作。函數updateLevel1不能找出對象文本。難道我做錯了什麼?如何將對象從HTML href鏈接傳遞給javascript函數?

+0

您可以使用jQuery。它可以減輕你的編碼。在這種情況下,你可以看看http://api.jquery.com/jQuery.data/ – 2011-11-26 16:50:23

+0

是啊,我想過jQuery,但是當我通過jQuery的一些代碼看起來很難理解,我只想使用基本jscript的功能。但無論如何感謝您的建議! –

回答

0

你需要打破你的字符串,並插入價值文字字面上。

link.setAttribute("href", "javascript:updateLevel1('" + text + "')");

只是要小心 - 你可能需要清理文本,如果它包含任何單引號。

如果這是你要運行類似text = text.replace("'", "\\'");

+0

是的,下面的工作 link.setAttribute(「href」,「javascript:updateLevel1('」+ text +「')」); 謝謝亞當。你很棒。 –

1

是的,你沒有正確地做一些事情的可能性。首先,而不是設置了「href」屬性,你可以添加一個「點擊」處理程序的元素:

var link = document.createElement('a'); 
link.onclick = function() { updateLevel1(text); }; 

實在沒有理由使用「的javascript:」網址,在這樣的情況下。

現在,您遇到的另一個問題是您創建了<a>元素,但不會將其附加到文檔中(在您發佈的代碼中)。我想在某個地方,你可以使用「createListItem()」函數的返回值,然後追加它。如果沒有,那麼,沒有什麼會真的發生。

「href」的「javascript:」值不起作用的原因是您正在設置一種情況,即點擊「<a>」時,瀏覽器將從該字符串創建一個函數。此時,來自該函數的局部變量「text」早已消失。但是,如果使用綁定到<a>的「onclick」屬性的實際函數引用,則函數將在其閉包中保留對該變量的訪問權限。

+0

使用onclick的問題是,如果我不提及元素a的href屬性,那麼它將不會在網頁上顯示元素(我經歷過它)。如果我提到href屬性以及onclick那麼我應該在這兩個地方放置什麼。所以我只使用href屬性來調用jscript方法。並關於追加,是的,我將它追加到另一個函數的文檔:) –

+0

反正感謝您的詳細迴應波蒂:) –

0

嘗試link.setAttribute("href", "javascript:updateLevel1(this);

然後你通過它的參考閱讀你的函數裏面。例如:

function updateLevel1(elm) { 
    clearNavFrame2(); 
    var link = document.createElement("a"); 
    link.setAttribute("name", elm.name); 
    ... 
} 
+0

我嘗試使用這個對象,但它不工作。我在某處讀取它傳遞窗口的對象而不是html元素。 –

+0

波蒂是對的,你不應該那樣做。使用''link.onclick = ...'或者內聯如果有必要''請使用plein Javascript' Mic

1

只需使用一個事件處理程序:

function createListItem(text1) { 
    var link = document.createElement("a"); 
    var text = text1; 
    link.setAttribute("name", text); 
    link.setAttribute("href", "#"); 

    link.onclick = function(){ 
    updateLevel1(text); 
    return false; 
    }; 

    var list_item = document.createElement("li"); 
    var list_text = document.createTextNode(text); 
    list_item.appendChild(list_text); 
    link.appendChild(list_item); 
    return link; 
} 

function updateLevel1(text) { 
    clearNavFrame2(); 
    var link = document.createElement("a"); 
    link.setAttribute("name", text); 

     link.onclick = function(){ 
     updateLevel1(text); 
     return false; 
     }; 
    link.setAttribute("href", "#"); 
    link.appendChild(document.createTextNode(text)); 
    document.getElementById("navigation_frame1").appendChild(link); 
} 
+0

這也是一個不錯的選擇。我不知道這個功能link.setAttribute(「href」,「#」); 我會嘗試一次。謝謝 :) –