0
$('input').keypress(function(e){
    if(($(this).val().split('a').length - 1) > 0){
        console.log($('input').val());
        $('input').val($('input').val().replace('a', ''));
    }
})

jsfiddle:http: //jsfiddle.net/Ht8rU/

我只想输入一个“a”。我检查长度 a > 1,然后从输入中删除“a”,但这不起作用。我只想从此输入中删除第二个 a 。一个“a”是允许。

4

6 回答 6

2

编辑:哦,我现在明白了......如果你只想保留第一个a,你可以试试这个:

$('input').keypress(function(e) {
  var key = String.fromCharCode(e.which);
  if (/a/i.test(key) && /a+/i.test(this.value)) {
    e.preventDefault();
  }
});

演示:http: //jsfiddle.net/elclanrs/Ht8rU/6/


您必须检查当前输入的字母是否为a

if (String.fromCharCode(e.which) == 'a')

但这里有一个简化版本。val()如果可以使用,则不需要使用value,特别是因为它使您的代码更清洁。此外,您可能想检查一下正Aa表达式可能是一个更好的选择。这是代码:

$('input').keypress(function(e) {

    var A = /a/gi,
        letter = String.fromCharCode(e.which);

    if (A.test(letter)) {
        $(this).val(this.value.replace(A,''));
    }
});

演示:http: //jsfiddle.net/elclanrs/Ht8rU/3/

于 2013-06-15T22:34:12.803 回答
2

我建议使用 preventDefault 来阻止按键被按下:

$('input').keypress(function(e) {
    if (e.keyCode === 97 && $(this).val().split('a').length > 1) {
        e.preventDefault();
    }
});

JSFiddle

于 2013-06-15T22:45:04.403 回答
0

这段代码可能看起来很长而且没有任何用处,但它确实有效。

$('input').keyup(function(e) {
    var e = $(this),
        val = e.val(),
        aPos = val.indexOf('a'),
        spl1 = val.substring(0, aPos + 1),
        spl2 = val.substring(aPos, val.length).replace(/a/gi, ''),
        v = spl1 + spl2;
    e.val(v);
});

这是一个有效的JSFiddle

于 2013-06-15T22:38:45.167 回答
0

我会尝试这样的事情。不过,不确定input目前该事件的支持程度如何。

(function() {
    var elem = $('input');
    var value = elem.val();

    elem.bind("input propertychange", function(e) {
        if (elem.val().split('a').length - 1 > 1)
            elem.val(value);
        else
            value = elem.val();
    });
})();

http://jsfiddle.net/Ht8rU/8/

于 2013-06-15T22:49:18.733 回答
0

当用户按下“a”或“A”时,您可以检查是否已经存在一个“a”或“A”,如果已经存在,则不要将其添加到输入中。

$('input').keypress(function(e){
    if ((e.keyCode === 65 || e.keyCode === 97) & $(this).val().match(/a/gi) !== null) e.preventDefault();
})

更新了 jsFiddle

于 2013-06-15T22:49:57.440 回答
0

这是您的小提琴的修改版本:http: //jsfiddle.net/orlenko/zmebS/2/

$('input').keypress(function(e){
    var that = $(this);
    var parts = that.val().split('a');
    if (parts.length > 2) {
        parts.splice(1, 0, 'a');
        that.val(parts.join(''));
    } else {
        // no need to replace
    }    
})

请注意,我们仅在必要时替换输入的内容 - 否则,不断重写内容将导致无法在文本的中间或开头键入内容。

如果您想进一步改进它并使其即使在我们替换内容时也可以在开头键入请查看有关检测和恢复选择的问题:How to get selected text/caret position of an input that doesn't have重点?

于 2013-06-15T22:51:19.210 回答