Почему моя функция, которая заполняет текстовую область, работает только в первый раз?

#javascript #jquery #html

#javascript #jquery #HTML

Вопрос:

Javascript:

 function editQuestion() {
  $("body").on("click", ".edit_question", function(event) {
    $(this).closest("form").find("textarea").text("sample text");
    event.preventDefault();
  });
}

$(document).ready(function() {  
  editQuestion();
});
  

HTML:

 <form>
  <textarea>ormar</textarea>
  <div class="actions">
    <a href="#" class="edit_question">Cancel</a>
  </div>
</form>
  

При запуске функции, нажав на .edit_question ссылку, все работает так, как ожидалось, в первый раз.

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

Комментарии:

1. Где находится элемент with .edit_question ?

2. @shaunakde Прошу прощения, опечатка в вопросе. Теперь исправлено. Проблема все та же.

Ответ №1:

.text() изменяет только начальное значение текстовой области, поскольку начальное значение считывается из content ( <textarea>Initial value</textarea> ) элемента.

После изменения значения текущее значение сохраняется в value свойстве элемента DOM. Изменение начального значения после изменения текстовой области не имеет никакого эффекта.

Вот почему вы должны использовать .val() intead of .text() .

Комментарии:

1. @sudharsan: Не для меня. Сравнить jsfiddle.net/ktPe3 с jsfiddle.net/ktPe3/1 . Измените значение, затем щелкните ссылку. И тоже все отрицательные отзывы, может быть, вам следует запустить код самостоятельно, прежде чем делать поспешные выводы.

2. Снова .text() работает так же, как .val() в вашей скрипке. По-прежнему нет разницы между .val() и .text()

3. @sudharsan: Вы изменили значение перед тем, как перейти по ссылке, да?

4. @sudharsan нет, они не

Ответ №2:

Обновленная демонстрация сравнивается с исходной демонстрацией

Использовать .val() вместо .text() в случае ввода.

Проверьте это,

 $(document).ready(function () {
    $(document).on("click", ".edit_question", function (event) {

        $(this).closest("form").find("textarea").val('sample text');
        event.preventDefault();
    });
});
  

Примечание: метод .text() нельзя использовать для ввода формы или скриптов.

Ответ №3:

Попробуйте использовать метод .val() вместо .text() для текстовой области

Со страницы документации: метод .text() нельзя использовать для ввода формы или скриптов. Чтобы задать или получить текстовое значение элементов ввода или текстовой области, используйте метод .val() . Чтобы получить значение элемента script, используйте метод .html() .

ссылка: http://api.jquery.com/text/