[英]Jquery (2.2.0) click listener stops working after few clicks when using .on() but .click() works fine
我正在將Bootstrap 3.3.6與Jquery 2.2.0一起使用,並且嘗試使用.on()
設置我的bootstrap下拉菜單項的單擊偵聽器。 鏈接點擊會記錄幾次點擊(通常為2-3次),但隨后它們將停止工作。 如果我使用.click()
,則單擊將繼續工作而不會出現問題。
采取的確切步驟:
JS Fiddle在這里演示問題: https : //jsfiddle.net/e8qgqv9r/3/
<script>
$('#my-items').on('click', '.my-item-menu li a', function() { // FAILS
//$(document).on('click', '.my-item-menu li a', function() { // FAILS
//$('.my-item-menu li a').click(function() { // WORKS
var link = $(this);
var item = link.parent().parent().parent().parent().parent().parent();
if(link.hasClass('move_up')) {
if(item.index() > 0) {
item.parent().children().eq(item.index() - 1).insertAfter(item);
}
}
else if(link.hasClass('move_down')) {
if(item.index() < item.parent().children().length - 1) {
item.parent().children().eq(item.index() + 1).insertBefore(item);
}
}
else if(link.hasClass('tlog_remove')) {
item.remove();
}
link.closest('.my-item-menu').dropdown('toggle');
return false;
});
</script>
<div id="my-items">
<div class="well well-sm">
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-8">
<h4>My item 1</h4>
</div>
<div class="col-md-4 col-sm-4 col-xs-4">
<div class="dropdown pull-right">
<button id="menu-opt-btn-1" type="button" class="btn btn-default btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
options
<span class="caret"></span>
</button>
<ul class="my-item-menu dropdown-menu" aria-labelledby="menu-opt-btn-1">
<li><a href="" class="move_up">Move up</a></li>
<li><a href="" class="move_down">Move down</a></li>
<li><a href="" class="remove_item">Remove item</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="well well-sm">
<div class="row">
<div class="col-md-8 col-sm-8 col-xs-8">
<h4>My item 2</h4>
</div>
<div class="col-md-4 col-sm-4 col-xs-4">
<div class="dropdown pull-right">
<button id="menu-opt-btn-2" type="button" class="btn btn-default btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
options
<span class="caret"></span>
</button>
<ul class="my-item-menu dropdown-menu" aria-labelledby="menu-opt-btn-2">
<li><a href="" class="move_up">Move up</a></li>
<li><a href="" class="move_down">Move down</a></li>
<li><a href="" class="remove_item">Remove item</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
我.on()
錯誤地使用了.on()
,或者這是jquery / bootstrap的潛在錯誤? (或我的瀏覽器-當前在OS X上運行Chrome 48.0.2564.103(64位)嗎?)
不知道為什么,可能必須與bootstraps dropdown
插件的工作方式有關,但是您似乎在錯誤的元素上調用dropdown('toggle')
。 因此,可能是在未設置下拉菜單的元素上進行toggle
(例如,不是data-toggle
元素)最終導致事件冒泡被取消,從而使其永遠無法到達您的#my-items
或document
元素。 但這只是猜測,您必須深入研究他們的代碼才能確定。
開關
link.closest('.my-item-menu').dropdown('toggle');
像
link.closest('.dropdown').find("button").dropdown('toggle');
現在可以正常使用了
演示
$('#my-items').on('click', '.my-item-menu li a', function() { //$(document).on('click', '.my-item-menu li a', function() { //$('.my-item-menu li a').click(function() { var link = $(this); var item = link.parent().parent().parent().parent().parent().parent(); if(link.hasClass('move_up')) { if(item.index() > 0) { item.parent().children().eq(item.index() - 1).insertAfter(item); } } else if(link.hasClass('move_down')) { if(item.index() < item.parent().children().length - 1) { item.parent().children().eq(item.index() + 1).insertBefore(item); } } else if(link.hasClass('tlog_remove')) { item.remove(); } link.closest('.dropdown').find("button").dropdown('toggle'); return false; });
<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.0.min.js"></script> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"> <script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <div id="my-items"> <div class="well well-sm"> <div class="row"> <div class="col-md-8 col-sm-8 col-xs-8"> <h4>My item 1</h4> </div> <div class="col-md-4 col-sm-4 col-xs-4"> <div class="dropdown pull-right"> <button id="menu-opt-btn-1" type="button" class="btn btn-default btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> options <span class="caret"></span> </button> <ul class="my-item-menu dropdown-menu" aria-labelledby="menu-opt-btn-1"> <li><a href="" class="move_up">Move up</a></li> <li><a href="" class="move_down">Move down</a></li> <li><a href="" class="remove_item">Remove item</a></li> </ul> </div> </div> </div> </div> <div class="well well-sm"> <div class="row"> <div class="col-md-8 col-sm-8 col-xs-8"> <h4>My item 2</h4> </div> <div class="col-md-4 col-sm-4 col-xs-4"> <div class="dropdown pull-right"> <button id="menu-opt-btn-2" type="button" class="btn btn-default btn-sm" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> options <span class="caret"></span> </button> <ul class="my-item-menu dropdown-menu" aria-labelledby="menu-opt-btn-2"> <li><a href="" class="move_up">Move up</a></li> <li><a href="" class="move_down">Move down</a></li> <li><a href="" class="remove_item">Remove item</a></li> </ul> </div> </div> </div> </div> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.