我有一个与自动完成插件相关联的asp.net文本框。有了这个,我有一个插件的扩展,当用户选择匹配元素而不是选择时,只需按Tab键(模糊)。下面是代码。问题是,第一次模糊事件调用正常,整个功能工作得很好。但第二次,它根本不起作用,它只需要第一个元素的值。
我的情况就是这样。我有一个文本框和一个添加按钮。文本框具有自动完成功能,我输入说克,它填充所有单位。由于gram是数据源中的单位之一,按Tab键将接受,当我按下按钮时,文本gram及其相应的id将被添加到网格视图中。然后文本框将变为空白以添加更多此类条目。问题是,第二次当我输入与自动建议菜单项匹配的内容并按下tab键时,模糊事件不会触发。
$(".ui-autocomplete-input").on("blur", function (event) {
debugger;
if ($(this)[0].id == $("#MainContent_TabContainer1_TabpanelNormal_textinput")[0].id) {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "./AddRecipe.aspx/CheckIfRecipeTitleExists",
data: "{'title':'" + $('#' + 'MainContent_TabContainer1_TabpanelNormal_textinput').val() + "'}",
dataType: "text",
success: function (data) {
var oData = JSON.parse(data);
if (oData.d == "True") {
var textvalue = $('#MainContent_TabContainer1_TabpanelNormal_textinput').val();
alert("Recipe title " + textvalue + " already exists in our database. Please choose another title.");
$('#MainContent_TabContainer1_TabpanelNormal_textinput').val("");
$('#MainContent_TabContainer1_TabpanelNormal_textinput').focus();
}
}
});
}
var autocomplete = $(this).data("autocomplete");
if (autocomplete.selectedItem) { return; }
var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i");
autocomplete.widget().children(".ui-menu-item").each(function () {
var item = $(this).data("item.autocomplete");
if (matcher.test(item.label || item.value || item)) {
autocomplete.selectedItem = item;
return false;
}
});
if (autocomplete.selectedItem) {
autocomplete._trigger("select", event, { item: autocomplete.selectedItem });
}
});
请帮助我理解为什么第二次没有开火。
答案 0 :(得分:0)
如果没有完整的示例,我只能根据描述的行为进行猜测。
尝试使用委托事件进行模糊:
$(document).on('blur', ".ui-autocomplete-input", function (event) {
这将在事件冒泡到不变的祖先元素之后运行jQuery选择器,然后应用选择器,然后将该函数应用于导致该事件的任何匹配元素。这适用于动态更改DOM元素,因此可以解决您的问题。