Восстановление значения текстового поля не работает в моем сценарии

#jquery

#jquery

Вопрос:

С помощью моего кода я очищаю данные текстового поля на основе условия и пытаюсь восстановить фокус. Размер HTML-кода очень большой, поэтому я здесь не публикую, я сделал скрипку.

Мой код объясняется комментариями в этом скрипте. Восстановление текста в фокусе возвращает мне нулевое значение.
Но здесь это работает нормально

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

1. не используйте live в 1.7, это может быть проблемой

2. ` // Всякий раз, когда в текстовом поле происходило событие ввода, если длина значения больше ближайшего флажка / переключателя `???

3. @RoyiNamir Да.. В родительском <tr> текстового поля будет один переключатель .. Вы можете найти в HTML, приведенном в fiddle.

4. Вам действительно нужно кэшировать объект jquery $(this); , сделав var $this = $(this);

Ответ №1:

Некоторые недостатки в вашем коде:

  • </input> не следует использовать. Вместо этого используйте самозакрывающиеся теги <input ... />
  • parents() должно быть closest() . Возможно, что parents() выберите несколько элементов
  • Удалите .not(this) и добавьте следующее:

     if (this == _this)  {
        tt.data('text',tt.val());
    }
    else {
        tt.val('');
    }
      
  • Замените функцию на blur() на:

     if(ss.val(ss.data('text')).val().length > 0) ss.closest('tr').find('.humble').prop('checked', true)
      

http://jsfiddle.net/Mq8SC/9/

Ответ №2:

Проблема:
после каждого (!) нажатия клавиши или события изменения в одном поле ввода текста вы сохраняете значения всех других полей ввода текста, но после первого раза поля ввода пусты, и сохраненное значение будет перезаписано текущим значением (пустой строкой).
Например.: перезаписать только сохраненное значение, если строка не пуста?

Также смотрите обновленный jsfiddle.