jQuery .val değişikliği giriş değerini değiştirmez


104

Değerinde bağlantı bulunan bir HTML girdim var.

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

Belirli bir olaydaki değeri değiştirmek için jQuery kullanıyorum.

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

Yukarıdaki kod metin kutusunun değerini değiştirir ancak koddaki değeri değiştirmez (değer = 'http://www.link.com' değişmeden kalır). Değişim için = '' değerine de ihtiyacım var.


Ne demek istiyorsun in the code? Sayfanın orijinal (dolayısıyla değiştirilmemiş) kaynağına mı bakıyorsunuz?
Frédéric Hamidi

Chrome'un inceleme öğesini kullanma.
Lukas

3
@Luke Değer değişecek, ancak HTML öğesinin Chrome denetçisindeki görünür değeri değişmeyecek. Daha sonra değeri uyarmayı veya konsola vermeyi deneyin ve değiştiğini göreceksiniz. Bakın, değişti: jsfiddle.net/a8SxF
TheZ

Evet şimdi görüyorum. Değeri panoya kopyalamak için zClip kullanıyorum, ancak eski değeri değiştikten sonra kopyalıyor. Sanırım biraz uğraşarak düzeltebilirim.
Lukas

Yanıtlar:


185

attrBunun yerine kullanın .
$('#link').attr('value', 'new value');

demo


6
Bu tamamen doğru, setAttributeya da jQuery kullanarak attrDOM öğesinin değerini de etkileyeceksiniz: jsfiddle.net/a8SxF/1
TheZ

4
@TheZ bunun nedeni girdinin kirli değer bayrağının yanlış olmasıdır.
Girişle

5
Ama html ile almak istediğinizde .html(), o zaman hala aynı eski değer olacaktır, fark etmez, .val('new value')ya da attr('value', 'new value')... :(
Legionar

6
.Val kullanarak (daha önce okuduğum her şeyin önerdiği gibi) çok büyük ve karmaşık bir grup işlevi kodladım ve aynı sorunu yaşadım. Can sıkıcı! Bu yanıt, form öğelerini dinamik olarak güncellemek isteyen herhangi bir jQuery acemi için ilk çağrı noktası olmalıdır. Önce bunu okusaydım bana birkaç saat kazandırırdı!
Grant

2
Bu yüzden JavaScript / JQuery ile çalışmaya başlamak çok zor, bunun gibi pek çok uyarı. Bu bana çok yardımcı oldu. Teşekkür ederim!
eaglei22

13

Value özelliğinin değiştirilmesi defaultValue,. Kodda ( .html()veya ile alınan innerHTML) değer özelliği defaultValue, value özelliğini değil, öğesini içerecektir .


1
Bu onu açıklıyor. Yazmak da <input id = 'a' değer> 'i değiştirmez ancak $ ("# a"). Val () sonucunu etkiler. Emin olmak için bir soru: $ ("# a"). Val (değer), doğru değerin gönderilmesi için bir girdi öğesinin değerini değiştirmenin gerçekten doğru yolu mu?
Daniel Katz

1
Evet doğru. özniteliğin değiştirilmesi, gönderilenleri değiştirmez.
Kevin B


2

Bu sadece başıma gelen olası bir senaryo. Birisine yardımcı olursa o zaman harika: Kodun bir yerinde tüm metin kutularının değerlerini göstermeden önce temizlemek için bir işlev kullandığım karmaşık bir uygulama yazdım. Bir süre sonra jquery val ('değer') kullanarak bir metin kutusu değeri ayarlamaya çalıştım, ancak bundan hemen sonra ClearAllInputs yöntemini çalıştırdığımı fark etmedim .. yani bu da olabilir.


1
$('#link').prop('value', 'new value');

Açıklama: Attr, jQuery 1.6'da çalışacak, ancak jQuery 1.6.1'den itibaren bazı şeyler değişti. Çoğu durumda, prop (), attr () işlevinin eskiden yaptığı şeyi yapar. Kodunuzdaki attr () çağrılarını prop () ile değiştirmek genellikle işe yarar. Attr, sayfa yüklemesinde html'de tanımlandığı şekliyle öğenin değerini verir ve prop, jQuery aracılığıyla değiştirilen öğelerin güncellenmiş değerlerini verir.


Cevabınızı da açıklamayı deneyin
Vinoth Krishnan

0

Benzer sorunum, seçicide özel karakterlerin (örneğin nokta) bulunmasından kaynaklanıyordu.

Düzeltme, özel karakterlerden kaçmaktı:

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

1
Kabul edildi, çok kötü, kaçmamalısın, elemanının kimliğini yeniden adlandırmalısın.
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
Evet, bu gerçek değeri güncellemez. Ekrandaki metin kutusunu günceller, ancak bir form göndermeye çalıştığınızda değer, sayfanın orijinal olarak yüklendiğindeki değerdir.
Grant

-1

Benim için sorun, bu alanın değerini değiştirmenin işe yaramamasıydı:

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

Yukarıdaki çözümlerin hiçbiri benim için işe yaramadı, bu yüzden daha fazla araştırdım ve buldum:

DOM Seviye 2 Olay Spesifikasyonuna göre: Değişim olayı, bir kontrol giriş odağını kaybettiğinde ve odak kazandıktan sonra değeri değiştirildiğinde gerçekleşir. Bu, değişim olayının kullanıcı etkileşimi ile değişiklik üzerine tetiklenecek şekilde tasarlandığı anlamına gelir. Programatik değişiklikler bu olayın tetiklenmesine neden olmaz.

Çözüm, tetikleme işlevini eklemek ve aşağıdaki gibi değişiklik olayını tetiklemekti:

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

-2

Benzersiz olmayan kimliğe sahip birden fazla öğeyi iki kez kontrol edin! Foreach döngüsü ve kimliklerimin kopyalanması durumum buydu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.