1

サイトに検索入力ボックスがあります。ユーザーが入力ボックスにテキストを入力する場合、すべての [スペース] 文字を「&」に置き換えるのが好きです (つまり、スペースとスペース)

しかし、ユーザーがテキスト (バックスペース) を削除しようとすると、最後の文字が置き換えられたスペースだった場合に「 & 」が再び挿入されるため、コードに小さな間違いがあります...

JSFiddler での私の例を参照してください: http://jsfiddle.net/JFEb4/

何か案は?

コード:

$("[name='search']").keyup(function() {

    var input = $(this).val().replace(/ & /g, "x");

    if (input.indexOf(" ") >= 0) {
        $(this).val(input.replace(' ', ' & ').replace(/x/g, " & "

});
4

2 に答える 2

3

より良い方法は、文字が値に追加される前にスペースバーが押されたかどうかを確認し、押された場合は、文字が出力されないようにして&代わりに追加することです。
それはまた、バックスペースの問題をすべて一緒に回避します:

$("[name='search']").on('keydown', function(e) {
    if (e.which === 32) {
        e.preventDefault();
        this.value = this.value + ' & ';
    } 
});

フィドル

于 2013-07-25T15:28:34.227 に答える
0

これが私の見解です:

$("[name='search']")
    .on('keyup paste', function(e) {

        var replaceSpaces = function(el) {
            return function() {
                $(el).val($(el).val().replace(/(^|[^&])\s+($|[^&])/g, '$1 & $2'));
            };
        } (this);

        if (e.type === 'keyup' && e.which === 32) {
            replaceSpaces();
        } else if (e.type === 'paste') {
            setTimeout(replaceSpaces, 5);                
        }

    });

(このコードは jsFiddle にあります)

于 2013-07-25T17:40:00.910 に答える