Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Явный вызов процедуры обработки события. (https://javascript.ru/forum/misc/2635-yavnyjj-vyzov-procedury-obrabotki-sobytiya.html)

supchik 25.01.2009 19:36

Явный вызов процедуры обработки события.
 
вызов процедуры обработки события можно осществить двумя способами:
1)явно - назначив ссылку на процедуру обработки события в соответствующем свойстве объекта.
2)неявно

Есть код:
<html>
  <head>
  <title></title>
  </head>
<body>
<form name="form1">
<input type=button name=button1 value=Следующий size=16>
<input type=button name=button2 value=Предыдущий size=16 onClick="if (text2.value=='Я - гений'){text2.value='Я - умница'} 
else {if (text2.value=='Я - умница'){text2.value='Я - молодец'}
 else {text2.value='Я - гений'}}"><br>
<select name="select1" onChange="izmen()">
        <option name=option1 value="Я - гений" selected>Я - гений</option>
        <option name=option2 value="Я - молодец">Я - молодец</option>
        <option name=option3 value="Я - умница">Я - умница</option>
        <option name=option4 value="Я - лопух">Я - лопух</option></select><br>
Кто я?<input type=text size=15 maxlength=15 name=text2 ReadOnly>
</form>

<script>
function next(){
if (document.form1.text2.value=='Я - гений'){document.form1.text2.value='Я - молодец'}
else {if (document.form1.text2.value=='Я - молодец'){document.form1.text2.value='Я - умница'}
else {document.form1.text2.value='Я - гений'}}
}

document.form1.button1.click=(next)

document.form1.text2.value=document.form1.select1.options[0].value
</script>
</body>
</html>


Для кнопки button2 вызов процедуры события осуществляется неявно и работает. Для кнопки button1 вызываю явно и что-то не получается. Подскажите,в чем я ошибся?

Octane 25.01.2009 20:37

Цитата:

Сообщение от supchik (Сообщение 11388)
document.form1.button1.click=(next)

Это что такое вообще?

document.getElementsByName('form1')[0].getElementsByName('button1')[0].onclick = next;

supchik 25.01.2009 21:06

document.form1.button1.click=(next)

пытался так вызвать функцию next

documnet.getElementsByName('form1')[0].getElementsByName('button1')[0].onclick = next;

редактор пишет "Объект не поддерживает это свойство или метод"

Octane 25.01.2009 21:41

потому что опечатка в слове document

supchik 25.01.2009 22:22

я исправлял,не помогает

x-yuri 26.01.2009 06:38

Octane, не вижу причин не пользоваться dom level 0. Нигде не видел таких советов(здесь и здесь, например). Кроме того, стандарт HTML частично описывает DOM level 0 (события)

supchik, просмотри этот раздел, там ответ на твой вопрос

supchik 26.01.2009 08:51

Всем спасибо,нашел:

<BUTTON type="button" name="mybutton" value="10">
<SCRIPT type="text/javascript">
function my_onclick() {
. . .
}
document.form.mybutton.onclick = my_onclick
</SCRIPT>
</BUTTON>

x-yuri 26.01.2009 08:56

Цитата:

Ребят,у меня с техническим английским туго
так ты не читай, ты посмотри, какие атрибуты есть у тега input ;-)

Octane 26.01.2009 15:22

x-yuri, где там DOM? Это MSDOM был наверное, по стандартам было бы document.forms[0], a не document.form1.

x-yuri 26.01.2009 21:42

Цитата:

x-yuri, где там DOM? Это MSDOM был наверное, по стандартам было бы document.forms[0], a не document.form1
про HTML - я имел в виду назначение обработчиков событий
по поводу document.forms не думал, что оно в DOM описано
по поводу MSDOM - скорее Netscape DOM, потому что MS сначала повторила реализацию Netscape
а по поводу стоит ли писать document.form1, даже не знаю, может и не стоит

Octane 27.01.2009 02:03

Цитата:

Сообщение от x-yuri (Сообщение 11448)
про HTML - я имел в виду назначение обработчиков событий

JavaScript в атрибутах тегов зло! :D

x-yuri 27.01.2009 02:12

Octane, ну зачем же так категорично, а если это домашняя страничка, то почему нет? или просто небольшой сайт

Octane 27.01.2009 02:37

И что это меняет?

x-yuri 27.01.2009 03:07

Octane, хорошо, тогда почему javascript в атрибутах тэгов зло?

Octane 27.01.2009 09:29

А почему все стили элементов писать в их атрибутах style плохо?

x-yuri 27.01.2009 09:37

Octane, хорошо, отвечу за тебя, потому что при больших объемах javascript-кода это усложняет его изменение (поддержку). Ключевые слова - "больших" и "изменение" ;-)

Octane 27.01.2009 09:44

Это лень и наплевательское отношение к коду называется, когда знающий о динамическом назначении обработчиков событий программист пихает JavaScript код в атрибуты тегов, неважно при каких размерах сайта...

x-yuri 27.01.2009 10:35

нет, просто я считаю, что если нужно создать одну страничку, что-то там протестировать и тут же удалить ее, то придерживаться каких-то там стандартов и best practices смысла не имеет. И вообще, хороший программист - тот, который умеет делать исключения

Gvozd 27.01.2009 13:16

x-yuri, +1
Для тестинга вообще лучше не заморачиватся хорошим стилем
Для небольших сайтов и активных элементов, не несущих большую смысловую нагрузку нединамическое назеначение обработчиков допустимо, ИМХО.


Часовой пояс GMT +3, время: 06:02.