06.06.2012, 21:06
|
Интересующийся
|
|
Регистрация: 06.06.2012
Сообщений: 16
|
|
Не работает обработчик события в Mozilla Firefox
if(!tatarcha.loadEvents) tatarcha.loadEvents=function()
{
document.getElementById('combo_1').onchange=function(){
tatarcha.comboChange(event,false);
};
document.getElementById('combo_2').onchange=function(){
tatarcha.comboChange(event,false);
};
document.getElementById('combo_1').onfocus=function(){
tatarcha.comboChange(event,true);
};
document.getElementById('combo_2').onfocus=function(){
tatarcha.comboChange(event,true);
};
document.getElementById('convert').onclick=tatarcha.convertLanguage;
document.getElementById('word').onkeyup=tatarcha.getWord;
document.getElementById('insert').onclick=tatarcha.insertWord;
}
window.onload=tatarcha.loadEvents;
Собственно говоря не происходит обработка событий в MF. При этом работает в Chrome, IE, Opera. Проверял через Firebug, ошибок нет. Но, все свойства onclick,onfocus = null. Вывел (typeof document.getElementById('combo_2').onfocus) 'function'. Какое то несоответствия между консолью и выводом. В чём может быть проблема?
|
|
06.06.2012, 21:12
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
вешайте события через:
function addEvent( elem, evt, listener ) {
if ( elem.addEventListener ) {
elem.addEventListener( evt, listener, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( 'on' + evt, function() {
listener.call( elem, window.event );
});
}
}
addEvent( document.getElementById('combo_1'), "focus", function( event ){
tatarcha.comboChange(event,true);
});
|
|
06.06.2012, 21:39
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от devote
|
вешайте события через:
function addEvent( elem, evt, listener ) {
if ( elem.addEventListener ) {
elem.addEventListener( evt, listener, false );
} else if ( elem.attachEvent ) {
elem.attachEvent( 'on' + evt, function() {
listener.call( elem, window.event );
});
}
}
addEvent( document.getElementById('combo_1'), "focus", function( event ){
tatarcha.comboChange(event,true);
});
|
а в чем разница ?
|
|
06.06.2012, 21:42
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Guliashik,
Html выложите или ссылку на тестовую иногда фокус не проходит из-за cтруктуры HTML
|
|
06.06.2012, 21:43
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от cyber
|
а в чем разница ?
|
в том что объект event который юзает ТС:
document.getElementById('combo_1').onfocus=function(){
tatarcha.comboChange(*!* event */!*,true);
};
глобально определен не у всех, и не является стандартным решением.
|
|
06.06.2012, 21:53
|
Интересующийся
|
|
Регистрация: 06.06.2012
Сообщений: 16
|
|
<?php
header('Content-Type: text/html; charset=utf-8');
require_once('connect.php');
$rez = mysql_query("Select * FROM lng");
session_start();
if (!(isset($_SESSION['login']) && isset($_SESSION['password']))) {
session_unset();
session_destroy();
}
?>
<html>
<head>
<script type="text/javascript" src="scripts/main.js"></script>
</head>
<body>
<form method="POST" action="">
<select name="combo_1" id="combo_1">
<?php
for ($i = 0; $i < mysql_num_rows($rez); $i++) {
if (mysql_result($rez, $i, 'id') == 'rus') {
echo '<option value="' . mysql_result($rez, $i, 'id') . '" selected="selected">' . mysql_result($rez, $i, 'name') . '</option>';
} else {
echo '<option value="' . mysql_result($rez, $i, 'id') . '">' . mysql_result($rez, $i, 'name') . '</option>';
}
}
?>
</select>
<input type="button" name="convert" id="convert" value="<->">
<select name="combo_2" id="combo_2">
<?php
for ($i = 0; $i < mysql_num_rows($rez); $i++) {
echo '<option value="' . mysql_result($rez, $i, 'id') . '">' . mysql_result($rez, $i, 'name') . '</option>';
}
?>
</select>
<br>
<textarea name="word" id="word" cols="30" rows="3"></textarea>
<textarea name="translate" id="translate" cols="30" rows="3"></textarea><br>
</form>
<script type="text/javascript" src="scripts/alphabet.js"></script>
</body>
</html>
tatarcha.addEvent=function(element,type,listener)
{
if(element.addEventListener)
{
element.addEventListener(type, listener, false);
}
else
{
if(element.attachEvent)
{
element.attachEvent('on'+type,function() {
listener.call( element, window.event );
});
}
}
}
if(!tatarcha.loadEvents) tatarcha.loadEvents=function()
{
tatarcha.addEvent(document.getElementById('combo_1'), 'change',function(){
tatarcha.comboChange(event,false);
});
tatarcha.addEvent(document.getElementById('combo_2'), 'change',function(){
tatarcha.comboChange(event,false);
});
tatarcha.addEvent(document.getElementById('combo_1'), 'focus',function(){
tatarcha.comboChange(event,true);
});
tatarcha.addEvent(document.getElementById('combo_2'), 'focus',function(){
tatarcha.comboChange(event,true);
});
}
window.onload=tatarcha.loadEvents;
Не помогло. Также MF не работает. Вопрос: зачем
element.attachEvent('on'+type,function() {
listener.call( element, window.event );
});
??
|
|
06.06.2012, 21:56
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Guliashik
|
Не помогло. Также MF не работает.
|
Я же специально дал пример использования:
addEvent( document.getElementById('combo_1'), "focus", function( *!* event */!* ){
tatarcha.comboChange(event,true);
});
объект event добавьте
Сообщение от Guliashik
|
Вопрос: зачем
|
для ишака
|
|
06.06.2012, 22:08
|
Интересующийся
|
|
Регистрация: 06.06.2012
Сообщений: 16
|
|
Спасибо! Помогло!
На ишаке работает просто без этой конструкции.
Цитата:
|
event глобально определен не у всех, и не является стандартным решением.
|
Сейчас попробую разобраться почему так. А что значит он определён не у всех? Точнее, кто эти все? Внутри функции не было ссылки на объект event или что?
Спасибо ещё раз за помощь!
|
|
06.06.2012, 22:15
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от Guliashik
|
А что значит он определён не у всех?
|
Это значит что данное решение придумал микрософт, вытащив объект event в глобальное пространство, и некоторые браузеры просто его там держат для того что бы работали старые сайты, тоесть хром/опера так же содержат глобальный объект event но ФФ его не содержит, так как ФФ старается юзать то что пишут в стандартах, другие браузеры тоже держат стандарты но помимо этого еще и изжитки старых ИЕ пытаются поддерживать ради совместимости.
|
|
06.06.2012, 22:27
|
Интересующийся
|
|
Регистрация: 06.06.2012
Сообщений: 16
|
|
То есть получается в ФФ существует event только в контексте функции (в приведенном случае -обработчик события). И до этого (до правки исходного кода) у меня event был равен null?
|
|
|
|