【发布时间】:2015-07-28 10:35:04
【问题描述】:
所以我正在开发一个脚本,它在 Bootstrap 中使用下拉列表(typeahead_list 类)和文本框(et_email 类)。每当文本框失去焦点时,我都需要关闭下拉菜单。但是,如果有人单击下拉列表中的一个列表项(et_li 类),则该列表项的内容必须在关闭下拉列表之前填充文本框。
注意:所有 lis 都是动态生成的。我不知道这是否有区别。
此代码将 li 内容放入文本框中,但不会关闭下拉菜单。
$( ".et_email" ).focusout(function() {
$(".typeahead_list").on("click", "li", function() {
$(".et_email").val($(this).text());});
//$(".typeahead_list").hide();
});
此代码关闭下拉菜单,但不会将 li 的内容放入文本框中。
$( ".et_email" ).focusout(function() {
$(".typeahead_list").on("click", "li", function() {
$(".et_email").val($(this).text());});
$(".typeahead_list").hide();
});
关于如何解决这个问题的任何想法?冲突从何而来?
更新:
Alex Cassady 提出了以下修复建议:
$(".typeahead_list").on("click", "li", function() {
$(".et_email").val($(this).text()); // copy value
$(".typeahead_list").hide(); // then hide
});
感谢您的帮助。我之前研究过类似的解决方案。但是,我遇到了一个问题,因为每当电子邮件箱因任何原因失去焦点时,我都需要关闭下拉菜单......同时仍然响应 li 点击。在此示例中,下拉菜单仅在有人单击 li 时关闭。
但是,如果我尝试在 $(document).ready() 中为 $( ".et_email" ).focusout() 添加另一个处理程序,它将完全使该函数的效果无效。就像 $( ".et_email" ).focusout() 和 $(".typeahead_list").on("click", "li", function(){}) 不能一起生活在同一个宇宙中。有某种冲突。
基本上,我需要实现的规则是:当 et_email 因任何原因失去焦点时,始终关闭下拉菜单......但如果由于使用 typeahead_list div 的 li 单击而失去焦点,则使用内容填充文本框关闭下拉列表之前的那个 li。
【问题讨论】:
-
控制台没有错误?这个函数在
$(document).ready函数中吗? -
不要嵌套处理程序...
-
@odedta - 是的,它在 $(document).ready 中。
标签: javascript jquery css twitter-bootstrap dom