【发布时间】:2016-12-09 22:20:29
【问题描述】:
我正忙着让这个输入成为焦点。它是动态加载的。在输入模糊时,它应该进行一些检查,然后如果输入了不正确的 id,则返回该输入。 $(itemID) 是我想要关注的。
这是我在页面加载时调用的 javascript 函数。
function addBlurEvent() {
$("#brochureItems").on("blur", ".item-ID", (function (e) {
var itemID = $(this);
var itemIDVal = $.trim($(this).val());
if (itemIDVal != "") {
var item = "";
$.each(window.listOfItems, function(i, v) {
if (v.No.search(itemIDVal) != -1) {
item = v.Description;
return;
}
});
if(item != "") {
$(itemID).parent().parent().siblings(".item-desc").find("input").first().val(item);
$(itemID).parent().siblings(":last").find("input").first().focus();
} else {
slideDownMsg("Item: " + itemIDVal + " not found.");
slideUpMsg(3000);
$(itemID).focus();
}
} else {
$(itemID).parent().siblings(".item-desc").find("input").first().val("");
$(itemID).parent().siblings(":last").find("input").val("")
}
}));
$(".removeRow").on('click', function() {
$(this).closest("tr").remove();
});
}
这是动态添加的表格:
<table class="table table-bordered table-striped" id="brochureItems">
<thead>
<tr>
<th>
Item Code
</th>
<th>
Brochure Code
</th>
<th width="35%">
Item Description
</th>
<th>
Retail
</th>
<th>
Remove
</th>
</tr>
</thead>
<tbody>
<tr>
<td class="row">
<div class="col-md-8">
<input id="brochureItems_0__itemNo" class="form-control text-box single-line valid item-ID" data-val="true" data-val-required="The Item Code field is required." name="brochureItems[0].itemNo" aria-invalid="false" type="text">
</div>
</td>
<td class="row">
<div class="col-md-8">
<input id="brochureItems_0__brocCode" class="form-control text-box single-line" data-val="true" data-val-required="The Brochure Code field is required." name="brochureItems[0].brocCode" type="text">
</div>
</td>
<td class="row item-desc">
<div class="col-md-12">
<input id="brochureItems_0__itemDesc" class="form-control text-box single-line" data-val="true" data-val-required="The Item Description field is required." name="brochureItems[0].itemDesc" readonly="readonly" tabindex="-1" onfocus="this.blur()" type="text">
</div>
</td>
<td class="row">
<div class="col-md-8">
<input id="brochureItems_0__retail" class="form-control text-box single-line" data-val="true" data-val-number="The field Retail must be a number." data-val-required="The Retail field is required." name="brochureItems[0].retail" type="text">
</div>
</td>
<td class="remove"><span class="glyphicon glyphicon-remove removeRow"></span></td>
</tr>
</tbody>
我只能在检查器中看到。源代码显示了一个空的 div 表应该去的地方。
我认为这并不重要,但是 addBlurEvent 函数在 ajax 调用成功时被调用。这是第一个被调用的函数:
function loadItems() {
$.ajax({
url: '@Url.Action("_BrochureItems", "Brochure")',
type: 'POST',
data: { model: @Html.Raw(Json.Encode(@Model.brochureItems)) },
success: function (results) {
$("#itemList").html(results);
addBlurEvent();
},
error: function (request, status, error) {
displayError("Error", request.responseText);
}
});
}
【问题讨论】:
-
事件仅添加到 DOM 中当前存在的元素中。您需要将事件应用于在初始页面加载后动态创建的每个输入。
-
但是在动态添加项目后页面加载时调用此函数
-
您可以在问题中包含
html吗?注意itemID被定义为var itemID = $(this)处的jQuery 对象,不需要再以itemID作为参数调用jQuery()。 -
所以,有一件事:你将一个 jQuery 对象包装在一个 jQuery 对象中,这有点奇怪。
itemID已经是一个 jQuery 对象,所以你不需要做$(itemID).focus(),你可以做itemID.focus()。这样做没什么大不了的,只是看起来很有趣。您拥有的代码应该可以工作,除非该元素不存在或被禁用。检查您的控制台是否有任何错误。 -
onfocus="this.blur()"的目的是什么?
标签: javascript jquery