2015-06-06 18 views
17

Tôi là người mới bắt đầu với react.js và thật tuyệt vời nhưng tôi đang đối mặt với một vấn đề thực sự: Tôi cần đặt giá trị của đầu vào bằng javascript thuần túy nhưng thuần túy. không hoạt động như mong đợi. Lấy ví dụ này: mở URL này http://autoescolalatorreta.wix.com/latorreta#!contact/c24vqGiá trị cài đặt React.js của đầu vào

Bạn sẽ thấy có trường nhập "Email" có id là "CntctFrm2emailField". Tôi cố gắng để thay đổi giá trị của nó bằng cách sử javascript với mã này:

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

Nhưng đối với một số lý do React.js không cập nhật giá trị này vào nguyên nhân cốt lõi của nó nếu bạn cố gắng gửi biểu mẫu (Nhấp vào nút SEND) bạn sẽ thấy rằng nó sẽ hiển thị một thông báo lỗi nói rằng email không được điền đúng. NHƯNG một khi tôi nhấp vào bên trong trường email và nhập bất kỳ ký tự nào và nhấp vào nút GỬI, nó hoạt động tốt, ý tôi là, React.js sẽ thấy giá trị mới.

Vậy làm cách nào để thay đổi giá trị đầu vào và có React.js để cập nhật giá trị đó?

+0

Nếu bạn không thể đăng mã như bạn đã đề cập trong các nhận xét khác, tôi e rằng câu hỏi của bạn không phù hợp với trang web này và tôi khuyên bạn nên xóa nó. –

Trả lời

10

Bạn nên đăng mã của bạn để có được một/nhiều đến tình hình của bạn câu trả lời phù hợp tốt hơn, nhưng một suy nghĩ rằng sẽ chỉ làm việc được thiết lập

defaultValue 

thay vì value của đầu vào. Hãy xem bảng điều khiển trình duyệt của bạn, đó là những gì phản ứng sẽ đăng nhập ở đó.

Tùy thuộc vào mã của bạn, bạn có thể thiết lập các statesvalueonKeyUp hoặc tương tự với một chức năng hoặc lấy giá trị đầu vào mới khi biểu mẫu được gửi.

+1

Cảm ơn @michael. Xin lỗi vì không đăng mã nhưng tôi không phải là người đã làm trang web đó, tôi chỉ thêm một số tính năng và mã là một mớ hỗn độn. Nhưng nhìn xem, tôi đã thử đề xuất của bạn và nó không hoạt động -> document.getElementById ("CntctFrm2emailField"). DefaultValue = "[email protected]"; . Tôi nghĩ rằng tôi cần cho một số lý do cháy sự kiện onchange của nguyên nhân đầu vào đó tôi nghĩ react.js đang lắng nghe sự kiện onchange để cập nhật giá trị bên trong. Tôi đã thử kích hoạt sự kiện onchange() với js nhưng nó cũng không hoạt động. Có lẽ có một số cách để kích hoạt sự kiện thay đổi đó với phản ứng? –

+0

Cảm ơn bạn! Đã không nhận ra rằng prop này tồn tại. –

0

Đây là chìa khóa trong câu hỏi của bạn,

Nhưng đối với một số lý do React.js không cập nhật giá trị này vào cốt lõi của nó

Nguyên nhân chủ yếu là phản ứng công trình trong vòng một 'bóng dom 'và

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

Inst cập nhật giá trị phản ứng theo bất kỳ cách nào chỉ là đối tượng dom cửa sổ.

Phản ứng đã tích hợp sẵn các chức năng để cập nhật giá trị của đầu vào. Hãy thử cách đó.

Kiểm tra trang này để biết thêm về phản ứng dạng: https://facebook.github.io/react/docs/forms.html#controlled-components

+2

Cảm ơn bạn đã giải thích cho tôi rằng, thực sự có một "ảo dom" với phản ứng, và nó là những gì làm cho nó quá nhanh. Nhưng tôi nghĩ rằng những gì tôi cần là để kích hoạt sự kiện thay đổi trong đầu vào đó. Tôi đã thử firint rằng với javascript đơn giản .onchange() nhưng nó không hoạt động. Tôi nghĩ rằng tôi cần phải bắn nó với react.js. Bạn có thể vui lòng giúp tôi điều này được không? Tôi không thể tin rằng rất khó để cập nhật giá trị đầu vào bằng cách sử dụng react.js –

+0

Nếu bạn muốn trợ giúp tôi cần xem mã ... nhưng, nhìn vào trang web, toàn bộ biểu mẫu là một thành phần phản ứng được gọi là 'ContactForm' và các yếu tố đầu vào các sự kiện cũng được xử lý bằng phản ứng ('onclick && onchange'). Bạn đang sử dụng js hoặc jsx? – jmingov

+0

Tôi rất muốn cho bạn thấy mã nhưng tôi không biết làm thế nào hình thức này được lập trình vì tôi nghe nói về react.js lần đầu tiên ngày hôm nay. Tôi thậm chí không thấy thẻ

xung quanh đầu vào Email. Trong trình duyệt của bạn, bạn có thấy một biểu mẫu không? Tôi trigered onclick và onchange ngay bây giờ và unfortunatelly nó không làm việc quá ... bất kỳ ý tưởng khác? Tôi chỉ muốn đặt giá trị của đầu vào email, chỉ là điều đó! Tôi muốn đặt giá trị và tôi muốn react.js nhận ra giá trị này. –

8

Tôi đã viết và sử dụng chức năng này để kích hoạt trạng thái thay đổi đối với lĩnh vực này:

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

Sử dụng nó như thế này:

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

Tôi có biểu mẫu mà tôi cần gửi để theo dõi. Tôi đã làm điều đó như thế này:

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

Lưu ý rằng đối với trang web của tôi đã đăng nhập vào, tôi phải đặt cả giá trị và defaultValue. Có một số logic xác thực bổ sung được ràng buộc với đầu vào.giá trị

Các vấn đề liên quan