jquery为链接中的li分配onclick

我有一个项目清单

 

我希望能够将链接的onclick分配给li的onclick

到目前为止我的尝试是一次点击(因为我将脚本分配给onclick而不是执行脚本)

 $('.list li').click(function() { var launch = $('a.launch', this); if (launch.size() > 0) { this.onclick = launch.attr('onclick'); } }); 

提前谢谢蒂姆

建立在@Thomas Stock的 回答下面的代码阻止了点击链接而不是li的双重执行。 (从这里得到它jQuery网站)

 $(document).ready(function() { $('ul.list li').click(function(e) { var $target = $(e.target); if(!$target.is("li")) //magic happens here!! { return; } var launch = $('a.launch', this); if (launch.size() > 0) { eval(launch[0].onclick()); } }); }); 

你这样做,所以整个li块是一个可点击的链接,而不仅仅是一个元素? 如果是这样,您可以使用CSS轻松完成此操作。

HTML:

   Testing Block Elements       

CSS:

 #menu { list-style: none; padding: 0; margin: 0; } #menu li { /* Added to show the whole li element will be a clickable link. */ width: 250px; border: 1px solid #000000; } #menu li a { display: block; } 

编辑:

通过这样做,如果您真的需要在用户点击它时执行一些javascript,您只需要将click事件附加到标记。

使用每个循环遍历li而不是使用click:

 $(document).ready(function(){ $('.list li').each(function() { var launch = $('a.launch', this); if (launch.size() > 0) { this.onclick = launch.attr('onclick'); } }); }); 
 $('.list li').click(function() { var launch = $('a.launch', this); if (launch.size() > 0) { eval(launch.attr('onclick')) } }); 

马里奥的解决方案也将有效。 我将采取孩子的onclick事件并在实际点击时执行它。

Mario的解决方案将把onclick事件绑定到文件加载的li上。 选择最适合你的。

您最好的选择可能是选择一种特定的元素类型 – 也许是尺寸更大的元素 – 并将点击处理程序分配给那些。 如果将onclick设置为A标记和LI(通过任何方式),则调用可能会发生两次,除非您专门阻止在命名函数中出现此类事件冒泡。

您是否希望在两种元素类型上执行相同的操作,而不是仅仅一种? (如果它只是“只是一种预防措施”,那么最好解决问题,而不是用更多的脚本来铺平它们。)