2015-09-26 3 views
2

Я пытаюсь заменить строковое значение в textarea при наборе текста в jQuery. Я использовал событие keypress, чтобы попытаться достичь этого. Что может быть проблемой здесь в этом fiddle?JQuery заменить строку в textarea

<input type="text" id="textbox" /> 
<textarea id="txtArea">This is a sample test.</textarea> 

JQuery код

$("#textbox").keypress(function() { 
    var txtAreaValue = $('#txtArea').val(); 
    var txtAreaValueAfterreplace = txtAreaValue.replace('sample', $(this).val()); 
    $('#txtArea').val(txtAreaValueAfterreplace); 

}); 
+1

Это может быть опечатка, ваш звонок, чтобы получить значение текстовой области, не ищет его по идентификатору. Попробуйте '$ (# txtArea) .val();' – chRyNaN

ответ

3

Основная проблема заключается в том, что при использовании нажатия клавиши вы получаете значение поля ввода, прежде чем он установлен, так что ничего не появляется. Однако, даже если вы измените его на keyup, вы все равно получите только одно значение, потому что после замены «образца» оно исчезнет, ​​поэтому его нельзя заменить снова.

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

$("#add").click(function() { 
 
    $('#txtArea').val($('#txtArea').val().replace('sample', $("#textbox").val())); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text" id="textbox" /><br> 
 
<input type='button' id='add' value='add'> 
 
<textarea id="txtArea">This is a sample test.</textarea>

Или заменить, когда пользователь прекратил печатать

var typing; 
 

 
$("#textbox").keyup(function() { 
 
    // Stop the change from being made since they typed again 
 
    clearTimeout(typing); 
 
    
 
    // They typed, so set the change to queue up in a 3rd of a second 
 
    typing = setTimeout(function(){ 
 
     $('#txtArea').val($('#txtArea').val().replace('sample', $("#textbox").val())); 
 
    },350); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text" id="textbox" /><br> 
 
<textarea id="txtArea">This is a sample test.</textarea>

+0

возможно ли с помощью кнопки? – Kurkula

+1

Да, но с большей логикой. В зависимости от того, насколько сложным это может быть, это может быть так же просто, как заставить setTimeout заменить и очистить его на каждом нажатии клавиши, чтобы установить значение только после того, как кто-то прекратил набирать текст, или с помощью регулярного выражения для замены между словами напрямую, но это может также получить сложный в более крупных приложениях. – Jesse

+1

Я добавил фрагмент кода, который покажет вам, как он может работать, ожидая, пока они перестанут печатать на 350 миллисекунд – Jesse

1
  1. Вы хотите посмотреть на KeyUp, не нажатие (вы хотите убедиться, что вы u получите всю строку.
  2. Вы пытаетесь установить значение текстового поля правильно? Вы ищете значение textarea во второй строке javascript.
  3. Если вы замените образец на первый ход ключа, заменить второй ход клавиши не будет.
  4. Вы можете упростить линии 3 и 4 в одну строку.
  5. replace может использоваться только на строке. Поэтому вам нужно сначала получить значение, если вы собираетесь это сделать. txtAreaValue.val(). replace ('sample', $ (this) .val());

Вы можете поиграть с ним на этой скрипке: http://jsfiddle.net/snlacks/abc6skp9/

$("#txtBox").on('keyup', function() { 
    var txtValue = $(this).val(); 
    $('#txtArea').val("this is a " + txtValue); 
}); 

Если у вас есть более длинная строка, заменить может работать лучше, но вам все равно нужно хранить всю строку где-нибудь.

var longString = "some really long string... sample... more..."; 

$("#txtBox").on('keyup', function() { 
    var txtValue = $(this).val(); 
    $('#txtArea').val(longString.replace('sample', txtValue); 
}); 
+1

Это круто, но что, если у меня есть слово «образец»? – Jesse

+0

Вы можете сделать: $ (input) .val ("это" + textValue + "и другое слово."); –

+1

Это помещает весь текст текстового поля в оператор javascript.Что, если в поле textarea есть 1000 строк текста? – Jesse

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