Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: onMouse..... при создании объекта
 
 автор: viod   (05.10.2008 в 14:26)   письмо автору
 
 

Здравствуйте. Пожалуйста помогите в освоении javaScript.
Не знаю как правильно указать функцию обработчик событий мыши...

var oDiv = document.createElement("DIV");
oDiv.id = "btnDel";
document.getElementById("main").appendChild(oDiv);
oDiv.onMouseOver=func(param); //Пробовал так. 
oDiv.onMouseOut=func2(param); //    Сразу выполняется func2 и вобщем больше ничего.

  Ответить  
 
 автор: PAT   (05.10.2008 в 15:10)   письмо автору
 
   для: 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, который вы хотите передавать функциям, то объясните - что это за аргумент. Разберёмся :-)

  Ответить  
 
 автор: viod   (05.10.2008 в 15:16)   письмо автору
 
   для: PAT   (05.10.2008 в 15:10)
 

Все ясно. Без параметра можно обойтись. Спасибо

  Ответить  
 
 автор: viod   (06.10.2008 в 07:12)   письмо автору
 
   для: PAT   (05.10.2008 в 15:10)
 

Обстановка изменилась. Объясните как можно обойтись без параметров.

В блоке есть textarea, и div. Каждый блок соответствует записи из базы данных. Div выполняет роль кнопки, его события и нужно обрабатывать. По onclick вызывается saveNews(id_news), где id_news это идентификатор записи базы данных.
Ява скрпт создает новую запись и получает ее id (AUTO_INCREMENT), затем создает новый блок. Так вот при создании div в нвом блоке нужно указать функцию на событие onClick в этой функции должен быть известен id созданной записи в бд.

  Ответить  
 
 автор: PAT   (07.10.2008 в 03:29)   письмо автору
 
   для: 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 и снова визжат "Не пашет!"... Всем хочется, блин, выглядеть отличниками по английскому языку...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования