2017-03-08 90 views
0

我有以下代码:JQuery的 - 当更改时触发手动更改

<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填充位置字段的值。

如果我在没有填写任何字段的情况下单击提交,客户端验证将启动,并且我们会在地址控件下方显示错误消息。

如果我现在在位置字段中输入一个值,jQuery将触发并且地址字段将填充一个值,但之前的错误消息不会清除。为了解决这个问题,我使用了.trigger("change");方法。

但是每次使用.trigger("change")时间调用它也激发了以下功能:

$("#Address").on('change', function (e) { 
    // do some other stuff 
}); 

我只是想火,只有当输入的jQuery手动和没有改变改变事件处理程序的地址。

我该如何做到这一点?

+0

哪里得到您的显示错误信息。它是否在输入错误时为其添加属性。 – Toxide82

回答

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'); 
}); 
0

我已经成功做修正以下:

$("#Address").on('change', function (e) { 

    if (e.originalEvent !== undefined) 
    { 
     // do some other stuff 
    } 

});