-1

我正在为 ul 下的每个 li 元素绑定(或至少尝试)一个函数。

但该事件永远不会触发。看看下面的代码,警告说“foo”正在显示,但是下一个说“bar”的警告应该在调用 li 标签后显示。

function set_search_value() 
{
    var e = document.getElementById("res_ls");

    alert("foo");
    for (var i = 0; i < e.children.length; i++) 
    {
        e.children[i].onclick = function() {
            alert("bar");
        }
    }
}

HTML

<ul id="res_ls" class="visible">
 <li><span><span class="highlighted">test</span>ing.com</span> <span>(181)</span></li>
</ul>
4

2 回答 2

0

我将您的确切代码放入 jsFiddle 中,它似乎可以按需要运行:http: //jsfiddle.net/qVQU4/

不过,我有一条建议要提供:<li>由于长列表中的性能原因,将单个单击处理程序附加到每个元素可能会出现问题,并且如果列表中的项目正在客户端通过 javascript 进行操作,则还需要额外的编码体操。更好的技术是将单个事件处理程序附加到父容器,并让点击冒泡到该级别。

这是一个使用 jQuery 的示例:http: //jsfiddle.net/qVQU4/1/

$("#res_ls").on("click", "li", function(e) { 
    // e.target will be set to the <li> element that was clicked
    alert("bar");
});

使用后一种技术,添加到列表中的任何新项目都将自动处理它们的点击,而无需连接任何额外的事件处理程序。

于 2013-08-02T15:12:42.870 回答
0

看看 jsFiddle 上的这个例子:http: //jsfiddle.net/drfisher/Ts7wZ/

var children = document.getElementById("res_ls").children;
var child;

for (var i = 0, len = children.length; i < len; i++) {
    child = children[i];
    if (child.nodeType == 1) {
        child.onclick = function() {
           alert(this.textContent);
        }
    }
}
于 2013-08-02T15:13:48.030 回答