Зміна jQuery .val не змінює вхідне значення


103

У мене є HTML-вхід із посиланням у значенні.

<input type = 'text' value = 'http://www.link.com' id = 'link' />

Я використовую jQuery для зміни значення певної події.

$('#link').val('new value');

Вищевказаний код змінює значення текстового поля, але не змінює значення в коді (значення = 'http://www.link.com' залишається незмінним). Мені потрібно також значення = '', щоб змінити.


Що ви маєте на увазі під in the code? Ви дивитесь на оригінальне (таким чином, немодифіковане) джерело сторінки?
Фредерік Хаміді

Використання елемента перевірки Chrome.
Лукас

3
@Luke Значення зміниться, але видиме значення HTML-елемента в інспекторі Chrome не буде. Спробуйте потім сповістити про значення або вивести його на консоль, і ви побачите, що воно змінилося. Дивіться, це змінилося: jsfiddle.net/a8SxF
TheZ

Так, я це зараз бачу. Я використовую zClip для копіювання значення у буфер обміну, але це копіювання старого значення після його зміни. Я думаю, що я можу це виправити, трохи занепокоївшись.
Лукас

Відповіді:


177

Використовуйте attrзамість цього.
$('#link').attr('value', 'new value');

демонстрація


6
Це абсолютно правильно, використовуючи setAttributeабо jQuery, attrви також вплинете
TheZ

4
@TheZ тому, що прапор брудного значення для вводу неправдивий. Спробуйте взаємодіяти з вхідними даними (значення брудне після введення користувачем), а потім встановітьAttribute
Esailija

5
Але коли ви хочете отримати html з .html(), тоді все ще залишиться те саме старе значення, неважливо, якщо ви використовуєте .val('new value')або attr('value', 'new value')... :(
Легіонер

6
Кодував масивний і складний набір функцій, використовуючи .val (як це запропонував усе, що я читав раніше), і у мене була така ж проблема. Криваво дратує! Ця відповідь має стати першою точкою дзвінка для будь-яких новачків jQuery, які хочуть динамічно оновлювати елементи форми. Врятував би мене добрі кілька годин, якби я прочитав це першим!
Грант

2
Ось чому так важко потрапити на землю під керуванням JavaScript / JQuery, так багато застережень, як це. Це мені дуже допомогло. Дякую!
eaglei22

13

Зміна властивості значення не змінює значення defaultValue. У коді (отриманому з .html()або innerHTML) атрибут value буде містити defaultValueвластивість, а не значення.


1
Це пояснює це. Введення тексту також не змінює значення <input id = 'a'>, але впливає на результат $ ("# a"). Val (). Питання просто для впевненості: чи справді $ ("# a"). Val (значення) є правильним способом змінити значення вхідного елемента, щоб подати потрібне значення?
Даніель Катц

1
Так, це правильно. зміна атрибута не змінить те, що надсилається.
Кевін Б

8

щоб трохи розширити відповідь Рікардо: https://stackoverflow.com/a/11873775/7672426

http://api.jquery.com/val/#val2

про val ()

Встановлення значень за допомогою цього методу (або використання властивості нативного значення) не спричиняє розсилання події зміни. З цієї причини відповідні обробники подій не виконуватимуться. Якщо ви хочете виконати їх, вам слід викликати .trigger ("змінити") після встановлення значення.


2

Це просто можливий сценарій, який трапився зі мною. Добре, якщо це допомагає комусь, то чудово: я написав складний додаток, де десь уздовж коду я використовував функцію для очищення всіх значень текстових полів, перш ніж показувати їх. Десь пізніше я спробував встановити значення текстового поля за допомогою jquery val ('value'), але я не помітив, що одразу після цього я посилався на метод ClearAllInputs .. так що це теж може статися.


0

Моя аналогічна проблема була викликана тим, що в селекторі були спеціальні символи (наприклад, періоди).

Виправлення полягало в тому, щоб уникнути особливих символів:

$("#dots\\.er\\.bad").val("mmmk");

Погоджено, дуже погано, вам не слід бігти, вам слід перейменувати ідентифікатор елемента.
webaholik

-1
<script src="//code.jquery.com/jquery.min.js"></script>
<script>
function changes() {
$('#link').val('new value');
}
</script>
<button onclick="changes()">a</button>
<input type='text' value='http://www.link.com' id='link'>

1
Так, це не оновлює фактичне значення. Він оновлює текстове поле на екрані, але коли ви намагаєтеся надіслати форму, значення є таким, яким воно було під час завантаження сторінки.
Грант

-1

Для мене проблема полягала в тому, що зміна значення для цього поля не працювала:

$('#cardNumber').val(maskNumber);

Жодне з вищезазначених рішень не працювало для мене, тому я дослідив далі і виявив:

Відповідно до специфікації події DOM рівня 2: Подія зміни відбувається, коли елемент втрачає фокус введення і його значення було змінено з моменту отримання фокусу. Це означає, що подія зміни призначена для активізації змін у взаємодії з користувачем. Програмні зміни не призводять до звільнення цієї події.

Рішення полягало в тому, щоб додати тригерну функцію і змусити її викликати подію зміни таким чином:

$('#cardNumber').val(maskNumber).trigger('change');

-2

Перевірити наявність декількох елементів з унікальним ідентифікатором! Такою була моя ситуація з циклом foreach та дублюванням ідентифікаторів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.