在jQuery中只删除第二个字符

时间:2013-06-15 22:21:02

标签: javascript jquery html

$('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”。

6 个答案:

答案 0 :(得分: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/

答案 1 :(得分:2)

我建议使用preventDefault来停止按键:

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

JSFiddle

答案 2 :(得分: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);
});

以下是working JSFiddle

答案 3 :(得分: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/

答案 4 :(得分:0)

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

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

Updated jsFiddle

答案 5 :(得分: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
    }    
})

请注意,如果必须,我们只替换输入的内容 - 否则,不断重写内容将无法输入midle或文本的开头。

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