2015-06-06 34 views
17

Ben rea.js ile yeni başlayan biriyim ve bu harika bir problemle karşı karşıyayım: Düz ve saf javascript kullanarak bir girdinin değerini ayarlamalıyım ama bazı sebepleri olan beklendiği gibi çalışmıyor. Bu örneği al: Bu URL'yi aç http://autoescolalatorreta.wix.com/latorreta#!contact/c24vqReact.js ayar değeri giriş değeri

"CntctFrm2emailField" kimliğinin "Email" giriş alanı olduğunu göreceksiniz. (GÖNDER düğmesini tıklamak)

document.getElementById("CntctFrm2emailField").value = "[email protected]"; 

Ama formu göndermek çalışırsanız nedense React.js çekirdek nedenine bu değerinin güncellenmesi değildir: Bu kod ile javascript kullanarak ona değerini değiştirmeye çalıştığınızda e-postanın doğru şekilde doldurulmadığını belirten bir hata mesajı göreceğini göreceksiniz. AMA, e-posta alanının içine tıklayıp herhangi bir harfi yazıp SEND düğmesini tıkladıktan sonra iyi çalışır, yani, React.js yeni değeri görür.

Peki bir giriş değerini nasıl değiştirebilirim ve bu değeri de güncellemek için React.js'yi kullanabilir miyim?

+0

Diğer yorumlarda belirtildiği gibi kodu gönderemezseniz, korkarım ki sorunuz bu web sitesi için uygun değildir ve kaldırmanızı öneririm. –

cevap

10

Daha iyi/durumunuza daha uygun cevap almak için kodunuzu gönderilmesi gerekiyor, ancak çalışacak bir düşünce sadece girdinin

defaultValue 

yerine value ayarlıyor. Tarayıcınızın konsoluna bir göz atın.

Kodunuzdaki bağlı olarak, bir işlevle statesvalueonKeyUp veya benzeri ayarlamak veya form gönderildiğinde yeni girişler değeri getirebilir. Bu söz konusu anahtarıdır

+1

Teşekkür ederiz @michael. Kodu yayınlamadığım için üzgünüm ama bu web sitesini kim yapmadım, sadece bazı özellikler ekliyorum ve kod bir karmaşa. Ama bak, önerinizi denedim ve çalışmaz -> document.getElementById ("CntctFrm2emailField"). DefaultValue = "[email protected]"; . Bence bu girdinin onchange olayıyla ilgili bir nedene ihtiyaç duyduğumu düşünüyorum çünkü reajan.js'nin dahili değeri güncellemek için onchange olayını dinlediğini düşünüyorum. Çoktan onchange() olayını js ile başlatmayı denedim ama çok çalışmıyor. Belki bu değişiklik olayını tepkiyle tetiklemenin bir yolu var mı? –

+0

Teşekkür ederiz! Bu prop olduğunu fark etmedi. –

0

,

Ama nedense React.js ana nedeni bir 'gölge içinde çalışmalarını tepki olduğunu

Özünde bu değerinin güncellenmesi değildir

dom 've

document.getElementById("CntctFrm2emailField").value = "[email protected]"; 

Herhangi bir şekilde tepkilerin değerini güncellemek için sadece pencere dom nesnesi.

React, girdinin değerini güncellemek için işlevler oluşturdu. Bu şekilde dene.

Kontrol formları tepki hakkında daha fazla bilgi için bu sayfayı: https://facebook.github.io/react/docs/forms.html#controlled-components

+2

Bana şunu açıkladığın için teşekkür ederim, gerçekten de tepkiyle bir "sanal dom" var ve onu bu kadar hızlı yapan şey bu. Ama bence ihtiyacım olan şey bu girdideki değişim olayını kovmak. Zaten javascript .onchange() ile ancak işe yaramazsa itfa denedim. Ben rea.js ile ateş etmem gerektiğini düşünüyorum. Bu konuda bana yardımcı olabilir misiniz? Bir giriş değerini güncellemek için çok zordur inanmak rea.js –

+0

Eğer yardım istiyorsanız ben kodu görmek gerekir ... ama, siteye bakarak, tüm formu 'ContactForm' denilen bir tepki bileşenidir ve girişler olaylar da tepki ('onclick && onchange') ile ele alınır. Js mi yoksa jsx mi kullanıyorsun? – jmingov

+0

Size kodu göstermeyi çok isterim fakat bu formun nasıl programlandığını bilmiyorum çünkü bugün ilk kez react.js'yi duydum. E-posta girişi çevresinde bir

etiket göremiyorum. Tarayıcınızda bir form görüyor musunuz? Şu anda onclick ve onchange'i tetikledim ve maalesef de çalışmıyor ... başka bir fikrin var mı? Sadece e-posta girdisinin değerini ayarlamak istiyorum, sadece bu! Değeri ayarlamak istiyorum ve react.js'nin bu değeri tanımasını istiyorum. –

8

yazdım ve alan için değişiklik durumunu tetiklemek için bu işlevi kullanın:

function doEvent(obj, event) { 
    /* Created by [email protected] */ 
    var event = new Event(event, {target: obj, bubbles: true}); 
    return obj ? obj.dispatchEvent(event) : false; 
} 

böyle kullanın:

var el = document.getElementById("CntctFrm2emailField"); 
el.value = "[email protected]"; 
doEvent(el, 'input'); 
1

Bazı izleme için göndermem gereken bir formum vardı. Böyle yaptım: Web sitesi için ben değeri ve defaultValue hem ayarlamak zorunda giriş olduğunu

$("input[type=email]").value = "[email protected]" 
$("input[type=email]").defaultValue = "[email protected]" 
$("input[type=password]").value = "mystellarpassword" 
$("input[type=password]").defaultValue = "pinpmystellarpasswordss" 
$("input[type=email]").dispatchEvent(new Event('input', {target: $("input[type=email]"), bubbles: true})); 
$("input[type=password]").dispatchEvent(new Event('input', {target: $("input[type=password]"), bubbles: true})); 
$("button.login").click() 

Not. Girişe bağlı bazı ekstra doğrulama mantığı vardı.değer

İlgili konular