Установите фактическое значение атрибута ввода с помощью jQuery

StackOverflow https://stackoverflow.com/questions/1634676

  •  06-07-2019
  •  | 
  •  

Вопрос

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

$(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"));

Соответствующее изменение селекторов и, возможно, добавление неопределенной проверки, как упоминал Райан.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top