gpt4 book ai didi

jQuery e.stopPropagation() - 如何在不完全破坏 dropbox 功能的情况下使用?

转载 作者:行者123 更新时间:2023-12-01 06:01:30 25 4
gpt4 key购买 nike

短篇故事: stopPropagation() 可以防止下拉菜单关闭 - 这很好。但它也会阻止下次打开保管箱 - 这很糟糕。

长话短说:我正在使用 Twitter-Bootstrap,并且在下拉菜单中放置了一个搜索框,如下所示:

<div id="search_word_menu" style="position:absolute;right:157px;top:60px;"> 
<ul class="nav nav-pills">
<li class="dropdown" id="menu200">
<a class="dropdown-toggle btn-inverse" data-toggle="dropdown" style="width:117px;position:relative;left:2px" href="#menu200">
<i class="icon-th-list icon-white"></i>
Testing
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">Retweets</a></li>
<li><a href="#">Favourites</a></li>
<li class="divider"></li>
<li><a href="#">A list</a></li>
<li class="divider"></li>
<li><a href="#">A saved search</a></li>
<li><a href="#">A saved #hashtag</a></li>
<li class="divider"></li>
<li>
<!-- HERE --> <input id="drop_search" type="text" class="search_box_in_menu" value="Search...">

</li>
</ul>
</li>
</ul>

当我在搜索框内单击时,默认行为显然是关闭下拉菜单 - 但这使得在搜索词中写入变得相当困难。所以我尝试了 e.stopPropagation(),它确实阻止了下拉列表的关闭。然后,当我在搜索框中按 Enter 时,我用 .toggle() 关闭下拉菜单 - 似乎也工作正常。

当我想再次执行所有操作时,问题就出现了,因为 e.stopPropagation() 现在已经完全禁用了下拉菜单 - 即。当我按下下拉菜单时,它不再打开!毫无疑问,这是因为 stopPropagation() - 但我该如何解决这个问题,以便获得上述功能,但又不会完全破坏其余功能?

下面的 jQuery:

$(document).ready(function() {
console.log("document.ready - ");

//clearing search box on click
$(".search_box_in_menu").click(function(e) {
e.stopPropagation(); // works for the specific task
console.log(".search_box_in_menu - click.");
if($(this).val() == 'Search...') {
$(this).val('');
console.log(".search_box_in_menu - value removed.");

};
//return false; //this is e.preventDefault() and e.stopPropagation()


});

// when pressing enter key in search box
$('.search_box_in_menu').keypress(function(e) {
var keycode = (e.keyCode ? e.keyCode : e.which);
if(keycode == '13') {
console.log(".search_box_in_menu - enter-key pressed.");
console.log($(this).val());
$(this).closest('.dropdown-menu').toggle(); //works

}
});


$('.dropdown').click(function() {
console.log(".dropdown - click.");
$(this).closest('.dropdown-toggle').toggle(); //does nothing
});

非常感谢您的帮助!我开始怀疑这可能是一个仅 Bootstrap 的问题,或者至少是由它们的实现引起的 - 但这超出了我的能力范围。

最佳答案

找到了解决方案:使用stopPropagation(),并通过手动触发器关闭框。然后,由于某种原因(stopPropagation() 重置了吗?),它起作用了。

//dealing with the dropdown box
$(document).ready(function() {
console.log("document.ready - ");

//clearing search box on click and prevent the dropdown from closing
$(".search_box_in_menu").click(function(e) {
e.stopPropagation();
console.log(".search_box_in_menu - click.");
if($(this).val() == 'Search...') {
$(this).val('');
console.log(".search_box_in_menu - value removed.");
};
//return false;

});

// when pressing enter key in search box
$('.search_box_in_menu').keypress(function(e) {
var keycode = (e.keyCode ? e.keyCode : e.which);
if(keycode == '13') {
console.log(".search_box_in_menu - enter-key pressed.");
console.log($(this).val());
$(this).closest('.dropdown').trigger('click');
}
});

//resetting a dirty search box
$('.dropdown').click(function() {
if ($(this).closest('.search_box_in_menu').val() == 'Search...') {
console.log(".search_box_in_menu - clean searchbox.");
}
console.log(".dropdown - click.");
});
});

关于jQuery e.stopPropagation() - 如何在不完全破坏 dropbox 功能的情况下使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11072002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com