Полезная информация

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№115-12-2009 15:31:54

credsys
Участник
 
Группа: Members
Зарегистрирован: 19-11-2009
Сообщений: 7
UA: Opera 9.5

onchange

После клика по кнопке тулбара открывается новая вкладка, в которой грузится страница с формой, полям передаются нужные значения, но мне нужно сымитировать событие 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>

Отсутствует

 

№215-12-2009 20:57:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.5

Re: onchange

А не надо потому что функции со страниц запускать.

Выделить код

Код:

gBrowser.loadURI("javascript: document.getElementById('selectid').onchange();");

или
createEvent/dispatchEvent:
https://developer.mozilla.org/samples/d … Event.html

Впрочем, можно и

Выделить код

Код:

window._content.document.getElementById('selectid').wrappedJSObject.onchange();

Но лучше так не делать.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№315-12-2009 21:56:43

credsys
Участник
 
Группа: Members
Зарегистрирован: 19-11-2009
Сообщений: 7
UA: Opera 9.5

Re: onchange

Спасибо огромное - именно то, что надо

Отсутствует

 

№415-12-2009 22:54:46

credsys
Участник
 
Группа: Members
Зарегистрирован: 19-11-2009
Сообщений: 7
UA: Opera 9.5

Re: onchange

Возник другой вопрос по вышеизложенному коду. Когда я меняю событие с DOMContentLoaded на load, программа по какой-то причине не заполняет поля на вновь открытой вкладке. Если вставить alert до цикла, то на заднем плане мессаги все загружается как надо. Дело в том, что мне помимо onchange, надо еще запустить onclick для ссылки, которая отправит данные в FCKeditor, но последний как я понимаю с DOMContentLoaded не успевает загрузится. Если вставить setTimeout, то проблема отпадает. Но этот вариант нерационален и нестабилен.

Отсутствует

 

№515-12-2009 23:07:55

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.5

Re: onchange

Событие load, помнится, не «всплывает» (точнее, перехватывается или в <browser>, или в <tabbrowser>, наверное).
.addEventListener("load", init, true);
должно помочь.
Разве что можно поймать событие совсем не оттуда, откуда нужно, так что есть смысл или проверку делать, или что-то вроде

Выделить код

Код:

var tab = gBrowser.selectedTab= gBrowser.addTab(URL);
tab.linkedBrowser.addEventListener ...

Отредактировано Infocatcher (15-12-2009 23:10:07)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№616-12-2009 10:36:28

credsys
Участник
 
Группа: Members
Зарегистрирован: 19-11-2009
Сообщений: 7
UA: Opera 9.5

Re: onchange

Да, действительно проблема неработоспособности load была в неправильном назначении объекта. Но к сожалению событие load тоже не катит - в FCKeditor данные, как и в случае с DOMContentLoaded, передаются только если выставить setTimeout(function (){gBrowser.loadURI("javascript: document.getElementById('autogen').onclick();");},1000). Что еще можно попробовать ?

Добавлено 16-12-2009 10:43:36
FCKeditor вроде как загружается через iframe. Может из-за этого load не работает так мне надо. Можно ли использовать что-то вроде

Выделить код

Код:

document.getElementById('FCK-iframe').addEventListener("load", init, true);

?

Отсутствует

 

№716-12-2009 16:48:32

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.5

Re: onchange

FCKeditor вроде как загружается через iframe. Может из-за этого load не работает так мне надо.

Угу, сначала будет событие 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);

(просто первое легче запомнить :))

Но можно, конечно, дождаться загрузки страницы, получить ссылку на нужный фрейм и ждать его загрузки.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]