JQuery - 手动进行更改时触发更改

时间:2017-03-08 12:21:28

标签: javascript 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填充,其中包含Location字段的值。

如果我点击提交而不填写任何字段,客户端验证就会启动,我们会在地址控件下面显示错误消息。

如果我现在在Location字段中输入一个值,则会触发jQuery,并且地址字段将填充一个值,但上一条错误消息不会清除。要解决此问题,我使用.trigger("change");方法。

但是每次我使用.trigger("change")时,它都会调用它来激活以下函数:

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

我只想在手动更改输入而不是jQuery的情况下触发更改事件处理程序上的地址。

我怎样才能做到这一点?

2 个答案:

答案 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
     }

});