2009-05-12 25 views
8

Tôi có trang web có phần tử biểu mẫu và cửa sổ bật lên (được mở bởi window.open).Tăng sự kiện "onChange" khi Phần tử đầu vào thay đổi bằng JavaScript từ Cửa sổ bật lên

Cả hai đều có sẵn jQuery.

Cửa sổ bật lên có javascript có thể thay đổi phần tử biểu mẫu trong cửa sổ mở. Điều đó hoạt động hoàn hảo bằng cách thực hiện ...

$(opener.document.formelement).val(vals[0]); 

Tuy nhiên, việc thực hiện sự kiện onChange sẽ không kích hoạt. Điều đó sẽ được yêu cầu bởi một số yếu tố trang khác, mặc dù. Vì vậy, tôi đã cố gắng tự mình tổ chức sự kiện onChange với

$(opener.document.formelement).change(); 

Nhưng điều đó không làm gì cả.

Bất kỳ gợi ý? Tôi chắc chắn phải có sự kiện onChange được kích hoạt do kiến ​​trúc của các phần tử trang khác.

Câu hỏi này tương tự như Call Javascript onchange event by programatically changing textbox value, nhưng các giải pháp được đề xuất từ ​​câu hỏi đó dường như không hiệu quả đối với tôi. Có lẽ đó là vì cửa sổ bật lên.

Trả lời

10

Có lẽ cửa sổ chéo của nó đang gây tổn thương cho bạn ... Hãy thử tạo một hàm bên trong trình mở mà bạn gọi thay thế. Có thể giúp?

Trong mở:

window.changeMyElement = function(value) { 
    $(formelement).val(value).change(); 
} 

Từ popup:

opener.changeMyElement(value); 
+0

Cảm ơn. Điều đó làm việc hoàn hảo! – BlaM

+2

opener. $ ('...'). Val (newval) .change(); – Tracker1

2

Dòng này là nghĩa vụ phải làm việc:

$(opener.document.formelement).change(); 

Theo jQuery documentation dòng này gây nên sự kiện thay đổi của mỗi yếu tố phù hợp.

Nếu nó không hoạt động cho bạn thì có một vấn đề trong mã của bạn ở đâu đó. Bạn có thể kích hoạt sự kiện onchange bằng cách thay đổi trong phần tử biểu mẫu bằng tay không?

+0

Y es, tôi có thể. Nó hoạt động hoàn hảo (mặc dù thông thường nó phải là một phần tử ẩn). Tuy nhiên tôi nghi ngờ rằng nó bị cấm để thực thi JavaScript trong "mở" từ một popup vì lý do an ninh. Và việc kích hoạt một sự kiện sẽ thực thi JavaScript. – BlaM

0

Bạn cũng có thể làm:

window.opener.document.getElementById('controlname').fireEvent('onchange'); 

Hoặc trong ngữ cảnh của bạn:

$(opener.document.formelement).fireEvent('onchange'); 
+1

Được cảnh báo rằng điều này thực sự chỉ hữu ích với IE và chỉ các phiên bản cũ hơn 9: http://help.dottoro.com/ljvtddtm.php – RustyTheBoyRobot

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