|
|
|
| Здравствуйте. Пожалуйста помогите в освоении javaScript.
Не знаю как правильно указать функцию обработчик событий мыши...
var oDiv = document.createElement("DIV");
oDiv.id = "btnDel";
document.getElementById("main").appendChild(oDiv);
oDiv.onMouseOver=func(param); //Пробовал так.
oDiv.onMouseOut=func2(param); // Сразу выполняется func2 и вобщем больше ничего.
|
| |
|
|
|
|
|
|
|
для: viod
(05.10.2008 в 14:26)
| | Начнём с ошибок:
1. Назначать функцию объекту можно как на этапе создания (ещё до исполнения appendChild), так и после "приживления" (после исполнения appendChild).
Разумеется, если назначаете ДО "приживления", то обрабатывать надо виртуальный объект oDiv.
А уж когда созданный объект "приживили", то надо работать с уже фактически существующим на странице объектом - document.getElementById ('btnDel')
2. В отличие от языка HTML, язык Javascript является регистроЗАВИСИМЫМ. Поэтому в HTML-коде конструкция <div onMouseOver="alert ('YES')"> сработает.
А вот в Javascript'e onMouseOver - это не событие "ухода мыши", а какое-то НОВОЕ свойство объекта под названием onMouseOver. Чтобы браузер воспринял именно событие "ухода мыши", необходимо записать его ПРАВИЛЬНО, а именно - onmouseover - где все буковки в нижнем регистре.
Ну а теперь о назначении функции.
1. Назначить динамически функцию можно только БЕЗ АРГУМЕНТОВ.
Т.е. ту функцию, которая записана в виде function func () {...}, где в круглых скобках НИЧЕГО НЕТ.
2. Назначаются функции для разных браузеров по-разному.
В общем виде (для вашего уже "приживлённого" объекта) - так:
//это поймут FireFox, Opera, Safari
if (document.addEventListener) with (document.getElementById ('btnDel'))
{
addEventListener ('mouseover', func, false);
addEventListener ('mouseout', func2, false);
}
//это сработает в Explorer'е
else if (document.attachEvent) with (document.getElementById ('btnDel'))
{
attachEvent ('onmouseover', func, false);
attachEvent ('onmouseout', func2, false);
}
//ну а это - для всех прочих браузеров
else
{
document.getElementById ('btnDel').onmouseover = func;
document.getElementById ('btnDel').onmouseout = func2;
}
|
3. Если возникнут сложности с тем самым аргументом param, который вы хотите передавать функциям, то объясните - что это за аргумент. Разберёмся :-) | |
|
|
|
|
|
|
|
для: PAT
(05.10.2008 в 15:10)
| | Все ясно. Без параметра можно обойтись. Спасибо | |
|
|
|
|
|
|
|
для: PAT
(05.10.2008 в 15:10)
| | Обстановка изменилась. Объясните как можно обойтись без параметров.
В блоке есть textarea, и div. Каждый блок соответствует записи из базы данных. Div выполняет роль кнопки, его события и нужно обрабатывать. По onclick вызывается saveNews(id_news), где id_news это идентификатор записи базы данных.
Ява скрпт создает новую запись и получает ее id (AUTO_INCREMENT), затем создает новый блок. Так вот при создании div в нвом блоке нужно указать функцию на событие onClick в этой функции должен быть известен id созданной записи в бд. | |
|
|
|
|
|
|
|
для: viod
(06.10.2008 в 07:12)
| | Любое событие на объекте несёт в себе информацию об этом самом объекте.
Т.е. если вы в HTML-коде прописали на каком-то теге какую-то функцию по какому-то событию (или динамически назначили функцию какому-то объекту, пусть и динамически созданному), то функция ВСЕГДА ПОЛУЧИТ информацию об объекте, из которого её вызвали. Даже если никаких параметров вы функции не передали.
Чтобы вы поняли, о чём идёт речь, пример: два разных объекта - <DIV> и <SPAN> - по клику на них вызывают одну и ту же функцию mtFunc (), не передавая ей никаких параметров. Ставим функции задачу: определить, по какому именно объекту кликнули и вызвали эту функцию:
<div id="myDiv" style="border: 2px solid red; padding: 10px" onclick="myFunc ()">Это - DIV</div>
<hr>
<span id="mySpan" onclick="myFunc ()">Это - SPAN</span>
<script>
function myFunc (evt01)
{
var s = evt01 ? evt01 : window.event;
var e = s.target ? s.target : s.srcElement;
alert ('Кликнули по тегу ' + e.tagName + ', который имеет id=' + e.id + ', и внутри которого написано ' + e.innerHTML);
}
</script>
|
Мысль поняли?
1. Создаёте объекты
2. При создании присваиваете объектам уникальные id
3. Навешиваете на объекты функции без передачи каких-либо параметров (только имена функций)
4. Внутри самих функций определяете - из какого именно объекта функция вызывалась и там же внутри функции узнаёте абсолютно всё, что вам нужно об этом объекте (включая его id).
PS. Аргумент функции у меня назван evt01. Вы можете ПЕРЕобозвать его как вам будет угодно... только, ради всего святого, не пользуйте СУЩЕСТВУЮЩИЕ имена свойств и объектов документа. А то я уже затрахался это объяснять здесь. Берут мой код и почему-то ОБЯЗАТЕЛЬНО переименовывают evt01 в event, а потом визжат, как резаные - "Не работает!!!". Или же имя инпута name="text023" из моего кода ОБЯЗАТЕЛЬНО сокращают до text и снова визжат "Не пашет!"... Всем хочется, блин, выглядеть отличниками по английскому языку... | |
|
|
|