2011-11-26 67 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”,“#”); 我会尝试一次。谢谢 :) –

相关问题