Установите фактическое значение атрибута ввода с помощью jQuery
Вопрос
Я пытаюсь сбросить атрибут фактического значения ввода, чтобы он мог быть сброшен до этого значения при сбросе, не обязательно исходного значения при загрузке формы. Проблема в том, что эти изменения не вступают в силу. Я пробовал оба:
$(this).attr('value', $(this).val());
а также ....
$(this).val($(this).val());
Ни один из них фактически не изменяет атрибут value = "
ввода, который используется при сбросе формы. Проблема заключается в том, что если кто-то сохраняет форму (через AJAX), затем снова редактирует ее и нажимает кнопку сброса (без сохранения этого времени), он вернется к исходным значениям, загруженным с страницы, а НЕ к последним сохраненным значениям, это то, что я пытаюсь получить. Я знаю, что есть способы обойти это (хранить в локальных переменных или что-то в этом роде), но решение jQuery было бы намного лучше. Есть идеи?
Решение
когда вы делаете что-то вроде этого:
$(this).val($(this).val());
это действительно переводится как:
var temp = $(this).val());
$(this).val(temp);
Так что, по сути, просто возвращаем одно и то же значение.
Вам нужно будет выполнить загрузку документа или запрос AJAX, сохранить значение в переменной и затем извлечь его при сбросе формы.
Другие советы
Это звучит как крутой трюк, вот еще один.
Вы можете изменить DOM, заменив весь элемент, вместо:
$('#my_input').val("new_value_here");
вы можете использовать:
$('#my_input').replaceWith(' < input type="text" value="new_value_here" />');
Я нашел решение для этого ...
При сохранении формы (через AJAX, при успешном обратном вызове):
// Set 'savedValue' attr on elements (for when reset, will reset to last saved values)
$('#myForm input').each(function() {
$(this).attr('savedValue', $(this).val());
});
Когда нужно сбросить форму:
// Reset form
if($('#myForm input:first').attr('savedValue')!=undefined) {
// Have saved values, reset to last saved values
$('#myForm input').each(function() {
$(this).val($(this).attr('savedValue'));
});
}
else {
// No saved values, reset form
$('#myForm')[0].reset();
}
Это прекрасно работает с текстовыми полями, и с небольшой настройкой вы можете заставить его работать с любым типом ввода. У меня много входных данных, поэтому я хотел избежать ручного сохранения / сброса их, если это вообще возможно. Это был бы хороший плагин ... может быть, завтра
Просто используйте thing.value = " foo " ;;
Проверьте, работает ли он, когда вещь является объектом jQuery, а также обычным объектом DOM. использование attr ('value', $ (this) .val ())
не будет работать так, как вы хотите
Даже лучше, чем локальная переменная, вы можете использовать методы jQuery Data для хранения значений сброса вместе с элементом, который будет сброшен.
При сохранении:
$(this).data("ResetValue", $(this).val());
При сбросе:
$(this).val($(this).data("ResetValue"));
Соответствующее изменение селекторов и, возможно, добавление неопределенной проверки, как упоминал Райан.