如何防止移位到进入按键进入jQuery的蒙面输入权当现有的值?(How do I keep exis

2019-09-27 07:07发布

我有我使用作为定时器显示“HH:MM:SS”的文本框当我选择框并按下一个数字,它插入在光标位置的数量,但不是在该位置替换值,它改变所有现有值了。 例如,定时器文本框显示“1点00分35秒”,我用1替换第一分钟位置,定时器文本框将读取“1点10分03秒。”

任何人都知道如何强制文本框来代替,而不是插入,在光标位置?

我试着拦截onkeypress事件,做手工替换,重写整个定时器文字,然后返回false。 但是,这并不与jQuery的工作掩盖输入,因为我的函数先运行。

Answer 1:

看起来这是蒙面输入插件的功能。 您可以尝试通过更换以下方法修改插件,然后noshift选项,当您拨打其设置为true(警告我做了这个最小的测试,但它似乎工作) - $(“#的showTime”)面具(。 “99:99:99”,{noshift:真});

    function shiftL(pos) {
      if(!settings.noshift){
        while (!tests[pos] && --pos >= 0);
        for (var i = pos; i < len; i++) {
          if (tests[i]) {
            buffer[i] = settings.placeholder;
            var j = seekNext(i);
            if (j < len && tests[i].test(buffer[j])) {
              buffer[i] = buffer[j];
            } else
              break;
          }
        }
      }
      writeBuffer();
      input.caret(Math.max(firstNonMaskPos, pos));
    };

    function keypressEvent(e) {
      if (ignore) {
        ignore = false;
        //Fixes Mac FF bug on backspace
        return (e.keyCode == 8) ? false : null;
      }
      e = e || window.event;
      var k = e.charCode || e.keyCode || e.which;
      var pos = $(this).caret();

      if (e.ctrlKey || e.altKey || e.metaKey) {//Ignore
        return true;
      } else if ((k >= 32 && k <= 125) || k > 186) {//typeable characters
        var p = seekNext(pos.begin - 1);
        if (p < len) {
          var c = String.fromCharCode(k);
          if (tests[p].test(c)) {
            if(!settings.noshift) shiftR(p);
            buffer[p] = c;
            writeBuffer();
            var next = seekNext(p);
            $(this).caret(next);
            if (settings.completed && next == len)
              settings.completed.call(input);
          }
        }
      }
      return false;
    };


文章来源: How do I keep existing values from shifting to the right when entering keypresses into a jQuery Masked Input?