我有一个脚本,该脚本会在页面加载时绑定到keyup事件,这会将光标设置在第一个字段中,然后在刷信用卡时,它会切碎磁条数据,但是当前代码似乎正在运行多次,我不确定如何只运行一次。

以下是相关代码:

<script type="text/javascript">

        window.onload = function () {
            $("#cn").focus();
            $("#cn").bind("keydown keyup", doItPlease);
        }
        function doItPlease() {
            var count = 0;
            if ($(this).val().indexOf('?') !== -1 && count < 1) {
                setFromCCS($(this).val())
                count++;
            }
        }
   </script>


这是完整代码的链接:http://paste2.org/p/1693324

更新1:

添加$(document).ready(function())解决了很多问题,但仍然无法获得所需的结果。由于正在输入的字符串中有两个问号(?),因此它仍在运行两次。有什么简单的方法可以限制它只能运行一次?

当前代码:http://paste2.org/p/1693577

更新2:

好的,所以我有了一个可行的解决方案,其中脚本将重新解析字符串并替换它。我觉得这是一个hack,有更好的方法可以做到,只是不确定目前如何。这是代码:

$(document).ready(function () {
        var count = 0;

        $("#cn").focus();

        $("#cn").keyup(function () {
            if ($(this).val().indexOf('?') !== -1 && count < 1) {
                var magstripe = $(this).val().substring(0, $(this).val().indexOf('?'));
                setFromCCS(magstripe);
                count++;
            }
            else if ($(this).val().indexOf('?') !== -1 && count > 0) {
                $("#cn").val($(this).val().substring(0, $(this).val().indexOf(';')));
            }
        });
    });


这是要解析的MagStripe:
%B9999999999999999 ^ AAAAAAA / AAAAAA ^ 1204101 999?; B9999999999999999 = 120410110000999?

最佳答案

您正在使用jQuery,因此请正确使用它:

$(document).ready(function() {
  var count = 0;

  $("#cn").focus();

  $("#cn").bind("keydown keyup", function() {
    if ($(this).val().indexOf('?') !== -1 && count < 1) {
      setFromCCS($(this).val())
      count++;
    }
  });
});


您需要使用$(document).ready(),因为当DOM准备就绪时,它将正确运行JS。

关于javascript - 信用卡刷卡器Javascript不断发展,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7679164/

10-13 07:32