【问题标题】:jquery text change event is not fired in chromejquery 文本更改事件不会在 chrome 中触发
【发布时间】:2014-11-04 06:33:39
【问题描述】:

我已经尝试将 jQuery change 事件放在 document.ready 中,但没有成功。 change 事件在 Firefox 和 IE 中有效,但在 Chrome 中无效。更改ctl00_ContentPlaceHolder1_Txt_RegNo Textbox 中的值时,甚至没有出现警告框。

但是当我在文本框中输入并使用退格从文本框中删除值时,它在 chrome 中工作。在 chrome 中更改文本框中的值时,它应该第一次工作。

脚本:

$("#ctl00_ContentPlaceHolder1_Txt_RegNo").change(function () {
    alert("done");
    var regno = $("#<%= Txt_RegNo.ClientID %>").val();
    var fleetno = $("#<%= Txt_FleetNo.ClientID %>");
    var customername = $("#<%= txtCustomerName.ClientID %>");
    var ridername = $("#<%= txtRiderName.ClientID %>");
    var phoneno = $("#<%= txtPhoneNo.ClientID %>");
    var email = $("#<%= txtEmail.ClientID %>");
    var chassis = $("#<%= txtchassis.ClientID %>");
    var ddlmodel = $("#<%= ddl_Model.ClientID %>");
    var ddltype = $("#<%= ddl_type.ClientID %>");
    var ddlcolor = $("#<%= ddl_color.ClientID %>");
    var ddl_year = $("#<%= ddlyear.ClientID %>");
    var KMS = $("#<%= txtKMSRUN.ClientID %>");
    var ddladvisor = $("#<%= ddl_ServiceAdvisor.ClientID %>");
    var expirydate = $("#<%= txtexpirydate.ClientID %>");
    var notes = $("#<%= txtnotes.ClientID %>");
    var data = { REGNO: regno };
    var jsonData = JSON.stringify(data); $.ajax({
        type: "POST",
        url: "JobCard.aspx/Populate_Reg",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (data.d.length > 0) {
                var e;
                for (var i = 0; i < data.d.length; i++) {
                    fleetno.val(data.d[i].FleetNO);
                    customername.val(data.d[i].CUSTOMER_NAME);
                    ridername.val(data.d[i].RIDERNAME);
                    phoneno.val(data.d[i].PHONENO);
                    email.val(data.d[i].EMAIL);
                    chassis.val(data.d[i].CHASSISNO);
                    ddlmodel.val(data.d[i].MAKE);
                    ddltype.val(data.d[i].MODEL);
                    ddlcolor.val(data.d[i].color);
                    ddl_year.val(data.d[i].Year);
                    KMS.val(data.d[i].KMSRUN);
                    ddladvisor.val(data.d[i].ADVISORID);
                    expirydate.val(data.d[i].EXPIRYDATE);
                    notes.val(data.d[i].NOTES);
                    e = expirydate.val()
                }

                var d1 = Date.parse(e);
                var dt = new Date(d1);
                var dateExpiry = dt.getMonth() + 1 + "/" + dt.getDate() + "/" + dt.getFullYear();
                var d = new Date; var datenow = d.getMonth() + 1 + "/" + d.getDate() + "/" + d.getFullYear();

                if (dateExpiry <= datenow) {
                    checkRegNo()
                }
            }
        })
    });
});

【问题讨论】:

    标签: javascript jquery asp.net google-chrome


    【解决方案1】:

    我使用 jquery 的 focusout 事件而不是更改和按键事件,它根据我的要求工作正常

    $("#ctl00_ContentPlaceHolder1_Txt_RegNo").focusout(function () {
        //your method body
    )};
    

    【讨论】:

    • 当某个元素或其中的任何元素失去焦点时,会将 focusout 事件发送到该元素。这与 blur 事件不同,它支持检测父元素失去焦点(换句话说,它支持事件冒泡)。
    【解决方案2】:

    尝试像这样使用jquery的keypress事件,

    $("#ctl00_ContentPlaceHolder1_Txt_RegNo").keypress(function () {
        //your method body
    )};
    

    如果您想在用户完成输入后获取文本框的值,则可以使用blur 事件。一旦文本框失去焦点,就会调用这个事件。

    【讨论】:

    • 谢谢,但是文本框附带了一个自动完成功能,因此按键事件在这里不合适
    【解决方案3】:

    正如here 所写,您可以使用monitorEvents JavaScript 函数来显示在元素上触发的所有事件。

    monitorEvents($('#ctl00_ContentPlaceHolder1_Txt_RegNo')[0]);
    

    在 Chrome 中,您会发现,只有 input 事件在 atocomplete 时被触发。

    input 事件并非在所有浏览器中都起作用,因此如果将其与change 事件结合使用,它应该在大多数浏览器中都起作用。

    $('#ctl00_ContentPlaceHolder1_Txt_RegNo').on('change input', function() {
        // Handle event
    )};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多