jquery不会阻止回发,然后重新调整原始数据

时间:2014-09-04 01:11:32

标签: javascript jquery asp.net

我正在从基本的USB信用卡读卡器中获取信用卡信息。一个膨胀的ASCII数据流被发送到文本框,我的js解析为有用位。一切正常。

我的ASP.NET应用程序中有以下大量的jquery,它可以在不同的页面上完美地运行,但在相关页面上有所突破。下面的jquery和我在其他页面上工作的唯一区别是第一行,.unbind()。我添加了这一行,因为这是我能找到让“更改”监听器触发的唯一方法。但它有一个副作用:在更改侦听器触发并且数据流被清除之后,以某种方式发生回发,然后RAW数据流进入我的文本框:txtCreditCardNumber。

重要提示:刷卡器似乎在流的末尾发送了一个CRLF,所以这可能导致回发。但这令人费解,因为即使我手动输入文本框并点击ENTER,也不会发生回发。

刷卡时,其他页面不会自动回发。在这个页面上,没有取消绑定,更改侦听器永远不会被调用,但是使用它,我得到正确的解析/清理,然后是回发,然后是使用来自读卡器的完整原始数据流填充的文本框。 / p>

$("#txtCreditCardNumber").unbind("keypress");

$('#txtCreditCardNumber').bind('change', function(e) {
    e.preventDefault();

    if (e.which == 46 || e.which == 8)
        return; // always ignore the DELETE and BACKSPACE keys

    var element = this;
    setTimeout(function() {
        var ccRawData = $(element).val();
        ccNumber = getCCNumberFromRawData(ccRawData);
        ccExpYear = getCCExpYearFromRawData(ccRawData);
        ccExpMonth = getCCExpMonthFromRawData(ccRawData, false);
        ccNameOnCard = getCCNameOnCardFromRawData(ccRawData);

        if (ccExpMonth.length == 1)
            ccExpMonth = "0" + ccExpMonth;

        $('#txtCreditCardNumber').val(ccNumber);
        $('#txtCCExpirationDate').val(ccExpMonth + "" + ccExpYear);
        //$('#ccEmbeddedName').html(ccNameOnCard);
        $("#txtCreditCardNumber").attr('maxlength', '16');
    }, 0);
    return false;
});

这是ASP.NET文本框:

<asp:TextBox runat="server" ID="txtCreditCardNumber" data-capture="CCAccountNo" CssClass="creditcard" style="width:114px" />

如果我可以阻止回发,我相信整个问题都会得到解决。我已经在做e.preventDefault(),但它没有效果。有什么想法吗?

0 个答案:

没有答案