我有以下代码:
<div>
<label>Location</label>
<asp:TextBox ID="Location" runat="server" CssClass="form-control" ClientIDMode="Static" placeholder="Enter location"></asp:TextBox>
</div>
<div>
<label >Address</label>
<asp:TextBox ID="Address" runat="server" CssClass="form-control" ClientIDMode="Static" placeholder="Enter the address"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" ErrorMessage="Address is Required" Display="Dynamic" ControlToValidate="Address" CssClass="field-validation-error" EnableClientScript="True"></asp:RequiredFieldValidator>
</div>
<asp:Button ID="Submit" runat="server" Text="Save" OnClick="btnSubmit_Click" CssClass="btn btn-primary" />
<script>
$("#Location").on('change', function (e) {
var location = $("#Location").val();
$("#Address").val(location).trigger("change");
});
$("#Address").on('change', function (e) {
// do some other stuff
});
</script>
地址字段通过jQuery填充,其中包含Location字段的值。
如果我点击提交而不填写任何字段,客户端验证就会启动,我们会在地址控件下面显示错误消息。
如果我现在在Location字段中输入一个值,则会触发jQuery,并且地址字段将填充一个值,但上一条错误消息不会清除。要解决此问题,我使用.trigger("change");
方法。
但是每次我使用.trigger("change")
时,它都会调用它来激活以下函数:
$("#Address").on('change', function (e) {
// do some other stuff
});
我只想在手动更改输入而不是jQuery的情况下触发更改事件处理程序上的地址。
我怎样才能做到这一点?
答案 0 :(得分:0)
输入然后根本不绑定更改事件处理程序。
当您手动更改值并使用.off()
删除事件侦听器时,应该绑定事件处理程序。
function AddressEventHandler(e) {
// do some other stuff
}
$("#Location").on('change', function(e) {
var location = $("#Location").val();
$("#Address").val(location)
.on('change.myNamespace', AddressEventHandler)
.trigger("change.myNamespace")
.off('change.myNamespace');
});
答案 1 :(得分:0)
我通过以下方式设法解决了问题:
$("#Address").on('change', function (e) {
if (e.originalEvent !== undefined)
{
// do some other stuff
}
});