2016-12-01 1 views
0

Я пытаюсь обрезать строку с помощью JavaScript (в JQuery), когда пользователь пишет:Как удалить/обрезать пробелы или вкладки во время записи?

$(document).on('keydown', "input[type='text'], textarea", function(e) { 
      $(this).val($(this).val().trim()); 
      console.log('fixing'); 
     //if ($(this).val() == "") { 
      //alert('gwo!'); 
     //} 
    }); 

Но проблема в том, когда пользователь пишет пространство, чтобы написать еще одно слово, этот код обрезает данные на входе и следующее слово сцепляется как:

I'mbigandgreat

Действительно, что мне нужно, чтобы удалить вкладки или пробелы, когда пользовательские тексты, используя CTRL + V из буфера обмена.

Вы можете помочь?

+1

Используйте [ 'paste'] (https://developer.mozilla.org/en-US/docs/Web/ События/вставка) вместо 'keydown'. –

ответ

1

Я думаю, что это то, что вам нужно. Ищите повторяющиеся пробелы. Сохраните последний и удалите других. String.replace с RegExp может справиться с этим.

Также я использовал KeyUp событие вместо KeyDown

$(document).on('keyup', "input[type='text'], textarea", function(e) { 
 
    let val = $(this).val(); 
 
    val = val.replace(/(?:^\s+|\s+?(\s))(\S+)/g, "$1$2"); 
 
    val = val.replace(/\s+(\s)$/, "$1"); 
 
    $(this).val(val); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<textarea cols="40" rows="10"></textarea>

+0

Это хорошо, но это не включает случай \ t, может быть: 'val.replace (/ \ s +? (\ S) (\ t) (\ S +)/g," $ 1 $ 2 ");'? ?? это верно? –

+0

@Cristian \ s включает в себя все символы пробела (\ п «,» \ т ... и т.д.) –

+0

Попробуйте с: '\t \ т \ т \ т \t \t asasdas asdasaas \t \ т \ т \ т \t \t' это позволит вкладкам все еще там. При этом «это только то, что я хочу здесь» t t \t, сначала появляется одно пространство. –

1

Вместо того чтобы просто захватывать любое событие keydown, вы должны запускать свой код обрезки только тогда, когда пользователь нажимает Ctrl + V или вставляет этот ввод.

Это будет сложно реализовать для IE, но для других браузеров вы можете использовать событие paste.

В качестве альтернативы (это воняет), проверьте e.which === 'код ascii для V' и e.ctrlKey === true.

0

Нужно ли даже обрезать его на клиенте? Если это важно, тогда вам все равно придется делать это на подаче, так что вы можете просто оставить его там.

Смежные вопросы