Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Создание события onclick? (https://javascript.ru/forum/events/3390-sozdanie-sobytiya-onclick.html)

kerranswell 15.04.2009 12:08

Создание события onclick?
 
Возможно ли самому синициировать (создать) событие onclick у элемента, например, у ссылки <a>. То есть, чтобы событие onclick вызывалось не нажатием на ссылку, а из скрипта.

PS я использую Thickbox для открытия модального окна. Открывается оно только по нажатии на ссылку или кнопку. Я не смог найти, каким образом окно можно открыть именно командой внутри скрипта, а не нажимая по ссылке мышкой. Я сделал так: скрыл из виду эту ссылку, и из скрипта в нужном месте вызываю метод click(). Но как оказалось в safari click() не вызывает обработчик события onclick и окно соответственно не открывается...

Kolyaj 15.04.2009 12:19

Цитата:

Сообщение от kerranswell
Я не смог найти, каким образом окно можно открыть именно командой внутри скрипта, а не нажимая по ссылке мышкой.

Плохо искали.

kerranswell 15.04.2009 12:52

Хорошо, буду искать дальше, но вопрос остается поднятым: Можно ли создать событие onclick ?

Kolyaj 15.04.2009 13:02

Цитата:

Сообщение от kerranswell
Можно ли создать событие onclick ?

Проще найти способ открыть окно.

kerranswell 15.04.2009 13:05

Вот что за привычка, обходить вопрос стороной? По нескольким форумам прошелся, находил темы типа "как создать событие" , в темах дофига ответов, но никто на сам вопрос так и не ответил, все почему хотят решить проблему другими способами, а про суть забывают.

Вопрос остается вопросом.

Kolyaj 15.04.2009 13:11

Да потому что
Цитата:

Сообщение от Kolyaj
Проще найти способ открыть окно.

Это даже описывать лень. Если вам не лень -- ищите.

Kolyaj 15.04.2009 13:16

И что за привычка, не слушать, что им говорят. Херню какую-нибудь вобьют в голову и думают, что она единственно правильная, при том, что она абсолютно не правильная и бредовая. Какая нафиг генерация событий, если вам нужно банально открыть окно?

kerranswell 15.04.2009 13:21

Посмотрите на название темы - написано "Создание события onclick?"
Я хочу знать как это делается, а то что мне надо открыть окошко (кстати я его уже открыл) - только для того чтобы предметную область была понятнее. Лень писать ответ - не пишите, никто не заставляет, но не обязательно об это сообщать.

Kolyaj 15.04.2009 13:49

Цитата:

Сообщение от kerranswell
но не обязательно об это сообщать

Сами спросили, а теперь не надо. Уж определитесь.

kerranswell 15.04.2009 13:55

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

Riim 15.04.2009 14:12

kerranswell,
Да не злись ты так. Тебе просто объясняют, что плохо так делать. Лично я не смог придумать ни одной ситуации где без этого никак нельзя обойтись.

Но если так уж надо то вот:
http://htmlcoder.visions.ru/JavaScript/?22
Там ближе к концу статьи есть пример.

Кстати, я переписывал этот код без генерации события, и он заметно упростился.

Kolyaj 15.04.2009 14:25

Цитата:

Сообщение от kerranswell
Лень порок известный, унесите его домой и там ленитесь сколько влезет

И это говорит человек, которому лень искать.

x-yuri 16.04.2009 00:18

Цитата:

Посмотрите на название темы - написано "Создание события onclick?"
Я хочу знать как это делается, а то что мне надо открыть окошко (кстати я его уже открыл) - только для того чтобы предметную область была понятнее
если ты хочешь узнать как это делается, а не решить свою проблему, то надо и вопрос соответственно задавать: "Народ! Подскажите как инициировать событие, чисто теоретически. Кому оно надо - хз, но просто интересно". А как решить твою проблему тебе уже сказали, и не на одном форуме. А ты уперся в свою решение
p.s. http://phpclub.ru/talk/showthread.ph...440#post719440

idler 16.04.2009 11:23

http://www.howtocreate.co.uk/tutoria...ript/domevents - тут хорошо все описано.
var fireOnThis = document.getElementById('someID');
var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent( 'click', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
fireOnThis.dispatchEvent(evObj);

kerranswell 16.04.2009 11:25

спасибо за ответы!

kerranswell 16.04.2009 11:33

Цитата:

И это говорит человек, которому лень искать.
если я трачу 30 минут на поиск и не нахожу того, что надо, я иду на форум - это естественно. Можешь ответить "искать надо уметь" - да, ищу как могу.

kerranswell 16.04.2009 12:52

idler, Круто твой код пашет!

var a = document.getElementById('my_a');
	if (document.createEvent)
	{
		var evObj = document.createEvent('MouseEvents');
		var psX = findPosX(a);
		var psY = findPosY(a);
		evObj.initMouseEvent('click', true, true, window, 1, psX, psY, 1, 1, false, false, true, false, 0, null );
		a.dispatchEvent(evObj);
	} else {
		a.fireEvent('onclick');
	}


И ничего геморойного, все просто)

idler 17.04.2009 00:37

да, да... искать надо уметь.
Я не в упрек....
Спасибо гуглу.
Запрос был примерно таким: firing even in safary javascritp
или
firing event in webkit javascript

точно запрос уже не помню.
Kolyaj, думаю не стоит упрекать человека, за то что он не умеет искать, либо не может спросить гугла по английски.
Думаю на русском такой информации значительно меньше.

Если не можете ответить - проигнорировали бы тему...

Kolyaj 17.04.2009 16:44

Цитата:

Сообщение от idler
Если не можете ответить - проигнорировали бы тему...

Я в следующий раз вам в личку свой ответ напишу, посоветуете, стоит ли отвечать.

idler 17.04.2009 17:14

Извините. Это был не ответ. А в личку не надо :)

Андрей Параничев 17.04.2009 17:15

А зачем создавать объект события для click, если обработчик может быть вызван просто методом click() на элементе?

idler 17.04.2009 17:17

Ну у человека был образовательный интерес - раз
В webkit, как я понял click() не работает - два

Андрей Параничев 17.04.2009 17:20

idler,
click() работает везде.

idler 17.04.2009 17:33

$('#id').mouseover()
$('#id').mouseout()
$('#id').keypress()
$('#id').keydown()
Тоже везде работают?

Андрей Параничев 17.04.2009 17:45

idler,
Ну я говорю не о jQuery, а о стандартных методах DOM. Есть методы click(), focus(), blur() и т.д., и создавать для них отдельные объекты Event - явно лишнее.

kuzy 06.05.2011 21:20

Я новичок. Подскажите как сделать так, что бы выпадающее меню расскрывалось после "клика", и закрывалось после повторного "клика" (ненумерованные списки).

simple 06.05.2011 23:46

делаешь меню ставишь событие onclick()

poorking 06.05.2011 23:57

Цитата:

Сообщение от Андрей Параничев
А зачем создавать объект события для click, если обработчик может быть вызван просто методом click() на элементе?

если сделать так div.onclick() то в метод не передастся информация о событии, то есть событие вообще не произойдет. вы просто вызываете обработчик

kuzy 07.05.2011 15:59

Чтото неполучается у меня с JS. Посмотрите, может что не так делаю.
Вот СКРИПТ:

<script type="text/javascript" src="">
function open_menu() {
element = document.getElementById()
if (element.style.display == "none") {
element.style.display = "block"
}
else
{
element.style.display = "none"
}
}
</script>

А вот код:


<table align="center" width="994" height="465" cellpadding="0" cellspacing="0">
<!--DWLayoutTable-->
<tr><td width="250" valign="top" class="sidebarleft">
<div class="sidebar1">
<ul class="nav">
<li><a href="#" target="_blank">Главная</a></li>
<li><a href="" onClick="open_menu('sub1')">Предприятие </a>
<ul id="sub1" style="display:none">
<li><a href="#" target="_blank">История</a></li>
<li><a href="#" target="_blank">Задачи</a></li>
<li><a href="#" target="_blank">Руководители</a></li>
<li><a href="#" target="_blank">Доска почёта</a></li>
<li><a href="#" target="_blank">Филиалы</a></li>
</ul></li>
</ul></div></td></tr></table>

9xakep 09.05.2011 21:09

По морковину делали?

9xakep 09.05.2011 21:09

По морковину делали?

9xakep 09.05.2011 21:20

А вот и првильный код:
<script type="text/javascript" src="">
 function open_menu() {
 var element = document.getElementById('sub1')
 if (element.style.display == "none") {
 element.style.display = "block"
 }
 else
 {
 element.style.display = "none"
 }
 }
 </script>
<table align="center" width="994" height="465" cellpadding="0" cellspacing="0">
 <!--DWLayoutTable-->
 <tr><td width="250" valign="top" class="sidebarleft">
 <div class="sidebar1">
 <ul class="nav">
 <li><a href="#" target="_blank">Главная</a></li>
 <li><a href="" onClick="open_menu()">Предприятие </a> 
 <ul id="sub1" style="display:none">
 <li><a href="#" target="_blank">История</a></li>
 <li><a href="#" target="_blank">Задачи</a></li>
 <li><a href="#" target="_blank">Руководители</a></li>
 <li><a href="#" target="_blank">Доска почёта</a></li>
 <li><a href="#" target="_blank">Филиалы</a></li>
 </ul></li>
 </ul></div></td></tr></table>


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