>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >onchange http://forum.mozilla-russia.org/viewtopic.php?id=42314 |
credsys > 15-12-2009 15:31:54 |
После клика по кнопке тулбара открывается новая вкладка, в которой грузится страница с формой, полям передаются нужные значения, но мне нужно сымитировать событие onchange, почему-то это оказалось не так просто: дальше строчки window._content.document.getElementById('selectid').onchange() код не выполняется. Выделить код Код:<script> function autospo_LoadURL(URL){ gBrowser.selectedTab= gBrowser.addTab(URL); window.content.focus(); } autospo_LoadURL('http://site.ru'); if (document.addEventListener) { document.addEventListener("DOMContentLoaded", init, false); } function init(){ if (arguments.callee.done) return; arguments.callee.done = true; window._content.document.getElementById('selectid').onchange(); for (h = 0; h < arr_mess.length; h=h+2){ if(arr_mess[h] == "short_descr"){ window._content.document.getElementById(arr_mess[h]).innerHTML=window._content.document.getElementById(arr_mess[h]).innerHTML+arr_mess[h+1]+'\n'; } else{ window._content.document.getElementById(arr_mess[h]).value=arr_mess[h+1]; } } } </script> <form method="post" id="formid" name="formname"> <select name="selectname" id="selectid" onChange="alert('dsdsadsa');"> <option value="1" />111 <option value="2" />222 <option value="3" />333 </select> </form> |
Infocatcher > 15-12-2009 20:57:12 |
А не надо потому что функции со страниц запускать. или Впрочем, можно и Но лучше так не делать. |
credsys > 15-12-2009 21:56:43 |
Спасибо огромное - именно то, что надо |
credsys > 15-12-2009 22:54:46 |
Возник другой вопрос по вышеизложенному коду. Когда я меняю событие с DOMContentLoaded на load, программа по какой-то причине не заполняет поля на вновь открытой вкладке. Если вставить alert до цикла, то на заднем плане мессаги все загружается как надо. Дело в том, что мне помимо onchange, надо еще запустить onclick для ссылки, которая отправит данные в FCKeditor, но последний как я понимаю с DOMContentLoaded не успевает загрузится. Если вставить setTimeout, то проблема отпадает. Но этот вариант нерационален и нестабилен. |
Infocatcher > 15-12-2009 23:07:55 |
Событие load, помнится, не «всплывает» (точнее, перехватывается или в <browser>, или в <tabbrowser>, наверное). Выделить код Код:var tab = gBrowser.selectedTab= gBrowser.addTab(URL); tab.linkedBrowser.addEventListener ... |
credsys > 16-12-2009 10:36:28 |
Да, действительно проблема неработоспособности load была в неправильном назначении объекта. Но к сожалению событие load тоже не катит - в FCKeditor данные, как и в случае с DOMContentLoaded, передаются только если выставить setTimeout(function (){gBrowser.loadURI("javascript: document.getElementById('autogen').onclick();");},1000). Что еще можно попробовать ? 16-12-2009 10:43:36 ? |
Infocatcher > 16-12-2009 16:48:32 |
Угу, сначала будет событие load от «главной» страницы и уже потом от фреймов. Выделить код Код:var url = "some_page_with_frames"; var tab = gBrowser.selectedTab = gBrowser.addTab(url); var win = tab.linkedBrowser; win.addEventListener("DOMContentLoaded", function(e) { _log(e.target.location.href); }, true); function _log(s) { setTimeout(function() { throw s; }, 0); } Ну, или Выделить код Код:Components.classes["@mozilla.org/consoleservice;1"] .getService(Components.interfaces.nsIConsoleService) .logStringMessage(s); (просто первое легче запомнить ) Но можно, конечно, дождаться загрузки страницы, получить ссылку на нужный фрейм и ждать его загрузки. |