Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.on()时,Jquery(2.2.0)click listener在单击几下后停止工作,但是.click()工作正常_Javascript_Jquery_Twitter Bootstrap - Fatal编程技术网

Javascript 使用.on()时,Jquery(2.2.0)click listener在单击几下后停止工作,但是.click()工作正常

Javascript 使用.on()时,Jquery(2.2.0)click listener在单击几下后停止工作,但是.click()工作正常,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我在Jquery 2.2.0中使用bootstrap 3.3.6,并尝试使用.on()为我的bootstrap下拉菜单项设置单击侦听器。链接点击注册了几次点击(通常2-3次),但随后它们停止工作。如果我使用.click(),则单击将继续工作而不会出现问题 采取的具体步骤: 使用“我的项目1”菜单“下移”;这会将其移到“我的项目2”下 使用“我的项目2”菜单“下移”;这会将其移动到“我的项目1”下 使用“我的项目1”菜单“下移”;这无法移动 JS小提琴演示问题: $(“#我的项目”)。在('单击

我在Jquery 2.2.0中使用bootstrap 3.3.6,并尝试使用
.on()
为我的bootstrap下拉菜单项设置单击侦听器。链接点击注册了几次点击(通常2-3次),但随后它们停止工作。如果我使用
.click()
,则单击将继续工作而不会出现问题

采取的具体步骤:

  • 使用“我的项目1”菜单“下移”;这会将其移到“我的项目2”下
  • 使用“我的项目2”菜单“下移”;这会将其移动到“我的项目1”下
  • 使用“我的项目1”菜单“下移”;这无法移动
  • JS小提琴演示问题:

    
    $(“#我的项目”)。在('单击','我的项目菜单li a',函数(){//失败
    //$(document).on('click','my item menu li a',function(){//失败
    //$('.my item menu li a')。单击(function(){//WORKS
    var-link=$(这个);
    var item=link.parent().parent().parent().parent().parent().parent().parent();
    if(link.hasklass('move_up')){
    如果(item.index()>0){
    item.parent().children().eq(item.index()-1).insertAfter(item);
    }
    }
    else if(link.hasClass('move_down')){
    if(item.index()
    
  • 我的项目2 选择权

    我是否错误地使用了
    .on()
    ,或者这是jquery/bootstrap的一个潜在错误?(或者我的浏览器——目前在OS X上运行Chrome 48.0.2564.103(64位)?

    不确定原因,可能需要了解bootstraps
    dropdown
    插件的工作方式,但您似乎在调用
    dropdown('toggle'))
    在错误的元素上。因此可能是在未设置下拉列表的元素上执行
    切换
    (例如不是
    数据切换
    元素)最终,他们的事件被取消,使其无法到达您的
    #我的项目
    文档
    元素。但这只是一个猜测,您必须深入他们的代码才能确定

    开关

    link.closest('.my-item-menu').dropdown('toggle');
    
    差不多

    link.closest('.dropdown').find("button").dropdown('toggle');
    
    现在它的工作原理与预期一致

    演示

    $(“#我的项目”)。在('click','上。我的项目菜单li a',函数(){
    //$(文档).on('单击',''。我的项目菜单li a',函数(){
    //$('.my item menu li a')。单击(函数(){
    var-link=$(这个);
    var item=link.parent().parent().parent().parent().parent().parent().parent();
    if(link.hasklass('move_up')){
    如果(item.index()>0){
    item.parent().children().eq(item.index()-1).insertAfter(item);
    }
    }
    else if(link.hasClass('move_down')){
    if(item.index()
    
    我的项目1
    选择权
    
    我的项目2 选择权

    你的小提琴使用的是
    jquery 2.1.4
    ?我相信它使用的是2.2.0。我已经在外部资源下列出了它。还是我遗漏了什么?@PatrickEvans——我应该澄清我采取的确切步骤:我使用“下移”选项中哪个项在列表中位于第一位。执行两次后,即我第三次尝试后,菜单项不再移动。(我也将使用这些详细信息更新问题)@PatrickEvans我可以复制该问题。。您只需使用
    $('.my item menu li a')进行计算。on(‘点击’,
    也可以从中看到。。您将其附加到
    parent
    上的具体原因是什么?很好的发现,谢谢!只是好奇,您是如何发现这个bug的?只是敏锐的眼睛,还是一些调试工具帮助识别了它?还有一个提示使用
    var item=link.closest('.well.sm')
    而不是
    var item=link.parent().parent()().parent().parent().parent().parent();
    link.closest('.dropdown').find("button").dropdown('toggle');