jQuery .attr ('value', 'new_value') не работает? - PullRequest
9 голосов
/ 01 апреля 2011

Я пытаюсь динамически изменить фактический атрибут HTML value ввода, используя jQuery.Хотя использование input.attr('value', 'myNewVal'); позволяет визуально изменить его, когда я проверяю источник с помощью Инструментов разработчика в Chrome, атрибут HTML не изменился.

Поскольку в дальнейшем я проверяю некоторый PHP, чтобы увидетьесли вход имеет свое первоначальное значение, мне нужен способ изменить фактический атрибут HTML, в идеале в jQuery.Кто-нибудь еще сталкивался с этой надоедливой ошибкой, и кто-нибудь из вас знает обходной путь?

Я также пробовал с .val(), и то же самое происходит - основной атрибут HTML не меняется.

Ответы [ 11 ]

15 голосов
/ 01 апреля 2011

attr также должно работать, особенно если вы видите, что оно меняется, но попробуйте также использовать val - оно лучше подходит для изменения значений:

input.val('myNewVal');

Убедитесь, что не , чтобы использовать команду «Просмотр источника» , она перезагрузит страницу или покажет страницу в том виде, как она была загружена.Вместо этого используйте DOM viewer - щелкните правой кнопкой мыши на элементе ввода и выберите «Проверить элемент» .(Это то же самое, что «Инструменты разработки» - Ctrl + Shift + I в Chrome в Windows)

7 голосов
/ 01 апреля 2011

И attr(), и val() имеют дело исключительно со свойством value [обновление февраль 2014: это было верно до jQuery 1.6, но неверно с момента введения prop() в 1.6] , не атрибут.Атрибут value указывает только начальное значение ввода.Как только фактический текст во входных данных был изменен (либо пользовательским вводом, либо сценарием), свойство и атрибут значения работают совершенно независимо.Почти во всех случаях это не имеет значения, потому что это почти всегда текущее значение, которое вы хотите (и именно это значение передается на сервер).

Если вам действительно нужно изменить фактический атрибут (которыйЯ почти уверен, что нет), сделайте это через setAttribute():

input[0].setAttribute('value', 'myNewVal');

Обратите внимание, что IE <8 (и режимы совместимости в IE 8) сломал поддержку <code>getAttribute() и setAttribute() сопоставляет атрибуты со свойствами, поэтому вышеприведенное не применимо в этих браузерах.

4 голосов
/ 01 апреля 2011

Использование .val().

input.val("some text");

Исходя из вашего комментария, view source, скорее всего, не будет обновлен. Если вы все еще получаете исходное значение, должно произойти что-то еще, и, скорее всего, потребуются более подробные сведения.

jsfiddle Боже.

3 голосов
/ 01 апреля 2011

Это не ошибка. Значение attributte не должно изменяться.

Элемент управления input немного особенный. Согласно спецификации HTML, атрибут содержимого value дает значение по умолчанию для элемента input. Вы можете увидеть фактическое значение элемента управления, которое было установлено программно или изменено пользователем в DOM Explorer. Когда форма сбрасывается, значение элемента устанавливается равным значению атрибута содержимого value. (здесь слишком много значений:))

Это стандартное поведение для всех типов ввода VISIBLE. (попробуйте установить значение для элемента HIDDEN, и значение атрибута содержимого будет обновлено ... как минимум в Firefox).

3 голосов
/ 01 апреля 2011

Это потому, что инструменты разработчика не обновляются.Это хорошо известная ошибка в этих инструментах, включая Opera, Safari, а также Firebug (последняя проблема - другая).

Насколько я знаю, вы можете щелкнуть правой кнопкой мыши окно исходного дерева инажмите "обновить".Это не обновляет страницу, просто просмотр исходного кода.Это «исправление» не работает в firebug.

2 голосов
/ 01 апреля 2011

Не используйте .attr() для изменения значения, используйте .val(), который был создан специально для этой цели:

input.val("new value");
1 голос
/ 03 июля 2013

У меня есть случай, в котором функция jQuery .val() и .attr("value", "...") работает неправильно для значения с URL.Функции обновляют пользовательский интерфейс, но это не влияет на DOM (источник).В этом случае следует использовать:

jQueryObj[0].setAttribute("value", "...");

Это верно для jQuery v1.5. * => V1.6. *, Для других версий это не проверяется.

1 голос
/ 01 апреля 2011

Те ответы, которые сообщают вам использовать метод .val ("значение"), являются правильными, единственный известный мне способ увидеть эти изменения (в источнике) - это Плагин для веб-разработчиков Firefox и нажав «Просмотр источника» -> «Просмотр созданного источника». Это показывает, что источник после манипулирования DOM (то есть вызовов метода .val ()), я часто его использую при работе с функциями / методами, которые модифицируют элементы DOM.

Итак, подведем итоги: [#input_id = ID вашего поля ввода]

$("#input_id").val("new value");

Затем используйте плагин для просмотра сгенерированного источника, и вы увидите обновленное значение.

1 голос
/ 01 апреля 2011

Это не изменит значение в проводнике DOM большинства инструментов разработки. Но JavaScript все равно получит текущие значения. Так

var newValue = 'new';
$(sel).val(newValue);
newValue == $(sel).val(); // true
1 голос
/ 01 апреля 2011

Инструменты разработчика показывают вам исходный код, полученный от сервера ( для атрибута значения ), поэтому вы видите действительно оригинальное значение.

Если вы хотите изменить его ( и проверить новое значение ), вы можете где-нибудь сохранить ссылку. Лучше всего использовать метод .data() и сверяться с этим сохраненным значением.

Для целей использования ( отправка или доступ к нему через JS ) достаточно изменить значение с помощью метода .attr() или .val().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...