-1

好的,我通过 UL 和 LI 的标签显示了一个下拉菜单。它通过一个 php 脚本呈现,该脚本回显:

'<li id='. $value .'>'.$value.'</li>' 

下面的 Jquery 函数适用于以这种方式显示的 LI 元素。该列表通过另一个 ajax php 脚本动态更改。ajax 与完全相同的东西相呼应(复制和粘贴)。它显示完美,但是 Jquery 函数/事件侦听器不再适用于 LI 元素。

为什么是这样???提前致谢。

$('li').click(function() {
    //anything
    alert('works');
}   
4

4 回答 4

1

$('li').click只影响页面上已经存在的元素。尝试这样的事情:

$('ol,ul').on('click','li',function() {...});
于 2013-06-18T03:13:19.557 回答
1

由于您说列表动态更改,因此您可能需要使用on for jquery >=1.7 的事件委托并为早期版本提供服务。尝试这个:

$(document).on('click', 'li' , function() { // Change document to ul or any other container that exists in DOM at any time to have the event delegated to li's
    //anything
    alert('works');
} 

在您的情况下可能发生的事情是,当您绑定 click 事件时,它们仅绑定到当时存在于 DOM 中的 li 。但是稍后您通过 AJAX 调用动态更新/添加 li,直接在 li 上的常规事件绑定将不会应用于此。因此,您只需将事件绑定到另一个容器(如 ul 或任何其他在 DOM 中随时存在的容器)或document头部,以便现在或将来创建的 li 获得委托可用的单击事件。

于 2013-06-18T03:12:19.553 回答
0
$('li').click(function() {
    //anything
    alert('works');
} 

单击仅适用于页面上已有的项目。

如果在处理程序连接后添加内容,则使用“on”

$('ul').on('click','li',function() {
    //anything
    alert('works');
});
于 2013-06-18T03:12:50.663 回答
0

<li>这将为您运行它时存在的那些设置点击处理程序。如果您稍后添加更多内容,它们将不会自动附加点击处理程序。

$('li').click(function() {
    //anything
    alert('works');
}   

从此开始:

<ul id=container>
  <li>Option 1</li>
</div>

您可以使用 Query 的.on方法从您的<ul>元素委派点击处理程序

$('#container').on('click','li', function() {
   // do your stuff here. **this** points to the clicked <li>
});

添加到的任何<li>元素<ul>都将自动获得点击处理程序功能。

于 2013-06-18T03:16:08.277 回答