Динамика INPUT под FF
Столкнулся с такой проблемой:
- есть сайт, он написан на ASP-VBScript.
- есть там формочки, и у некоторых INPUT есть динамические свойства типа onChange или onblur
Так вот: под IE эти события срабатывают, а в FF - нет.
Вопрос: что нужно сделать, что бы заработали
<input type="text" onblur='checkStr(f1077_val, f1077_avl)' onchange='checkStr(f1077_val, f1077_avl)' title="Несколько значений разделяются пробелом" size="20" name="f1077_val" />
onchange и onblur в FF работают отлично. Про между прочим, Firefox не поддерживает VBScript, это эксклюзивный язык Microsoft, и его сейчас почти не используют. Главный рынок, на котором его используют - индустрия написания вирусов. Насколько я понимаю, для некоторых вирусов он совершенно незаменим.
Почему его не используют - потому что все распространенные задачи с легкостью решаются JavaScriptом, более того, я не уверен, что есть вообще хоть одна задача, которая не решается JavaScriptом, и при этом доступна для этого Майкрософтовского эксклюзива.
Если написать грамотно на JS, то есть с document.getElementById() и прочим, и протестировать на современных браузерах - точно будет работать.
У меня тоже частично FF не работает как надо с событием onChange. В нижеприведенном коде, если все мышкой выбирать в select-е, то все работает как надо и в IE и в FF, но когда я встаю на этот select мышкой, а выбираю значения курсорными клавишами, то в IE событие onChange отрабатывает, а в FF нет. Не подскажете как в FF можно сделать возможным выбор в select-е курсорными клавишами?
<script language="JavaScript" type="text/javascript">
function testSelCB() {
var result=document.getElementById('locSel').options[document.getElementById('locSel').selectedIndex].value;
document.getElementById('test_CB').innerHTML = "";
document.getElementById('test_CB').innerHTML = result;
}
</script>
...
<body>
<form>
<select name="locSel" OnChange="testSelCB()" id="locSel">
<option value="">Выберите вариант...
<option value="var1">Вариант №1
<option value="var2">Вариант №2
<option value="var3">Вариант №3
</select>
</form>
<div id="test_CB" style="border:1px solid #000; padding:2px">
Тест выбора из комбобокса</div>
Я вот еще заметил, что для IE чтобы работало document.getElementById(), можно в свойствах тэга добавить аттрибут name, а для FF - аттрибут ID, иначе в FF document.getElementById() не отрабатывает.
В этом примере в FF при обращении к элементу document.getElementById('test1') не отработает, а IE отработает:
<select name="test1">Текст</div>
А в этом примере обращение document.getElementById('test1')... нормально отработает и в IE и в FF
<select name="test1" id="test1">Текст</div>
Потому что функция как раз для адресации по id. Более того, когда name делит пространство имен с id, это абсолютно неправильно. И даже может привести к катастрофе. Представьте, что у Вас на странице 10 форм, и в каждой есть поле name="login" - это абсолютно корректно, потому что в пределах каждой формы такое поле одно. А вот id обязаны быть уникальными в пределах всей страницы. Естественно, добавление name в массив id в данном случае не может быть корректным - это приведет к конфликту имен, и можно будет достать либо только первое такое поле, либо нельзя будет достать ни одного. Путаница усугубится, если у Вас есть элемент с таким же id, какой у текстовых полей name - тогда IE легко может вернуть не тот элемент.