Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2014, 10:17
Интересующийся
Отправить личное сообщение для preproger Посмотреть профиль Найти все сообщения от preproger
 
Регистрация: 17.02.2014
Сообщений: 10

Назначение onclick с параметром
Здравствуйте.
Есть код, в нем в цикле генерируются элементы, всем элементам присваевается вывоз ф-ции по событию onclick

li = document.createElement('LI');
li.onclick = toSelected;


Вопрос: как мне по клику присвоить вызов toSelected(1), если я так и напишу, то в li.onclick вернется вызов toSelected(1)

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2014, 10:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

preproger,
оберни в функцию
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2014, 10:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от preproger
вывоз

IE9+: toSelected.bind(this, 1)
Если нужна поддержка IE8, то либо подключить polyfill, либо писать код так:
onclick = function(){
    toSelected(1);
};


Но так получается что создается каждый раз новая функция. Как альтернатива - можно параметр устанавливать в атрибут элемента: li.setAttribute('data-index', 1)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2014, 11:00
Интересующийся
Отправить личное сообщение для preproger Посмотреть профиль Найти все сообщения от preproger
 
Регистрация: 17.02.2014
Сообщений: 10

Спасибо за ответы!
Получилось!

p.s. Да, с "вывозом" забавно получилось )
Сообщение от danik.js Посмотреть сообщение
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2014, 11:15
Интересующийся
Отправить личное сообщение для preproger Посмотреть профиль Найти все сообщения от preproger
 
Регистрация: 17.02.2014
Сообщений: 10

Столкнулся с проблемой.

Если мы назначаем обработчик
li.onclick = toSelected;


то в теле toSelected this у нас objectHTMLelement (мне это и нужно), а если вызов происходит через

li.onclick = function(){
    toSelected(1);
};


то this - window object.

Подскажите, пожалуйста, почему так происходит и как мне получить ссылку именно на тот li, по которому совершен клик, если мне обязательно вызывать toSelected с параметрами
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2014, 11:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от preproger
как мне получить ссылку именно на тот li, по которому совершен клик
Сообщение от danik.js
IE9+: toSelected.bind(this, 1)
проще так или call
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2014, 11:40
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от preproger
Вопрос: как мне по клику присвоить вызов toSelected(1), если я так и напишу, то в li.onclick вернется вызов toSelected(1)
Забейте это кол прямо в элемент и ничего никуда передавать будет не надо.

li.my_nice_property=1;

или по-научному

li.dataset.my_propertya = 1;

в вызове елемент достанет кол из тела и применит

var some = this.dataset.my_propertya;
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2014, 11:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от kostyanet
Забейте это кол прямо в элемент и ничего никуда передавать будет не надо.

Сообщение от danik.js
Как альтернатива - можно параметр устанавливать в атрибут элемента: li.setAttribute('data-index', 1)

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
</head>

<body>
<script>
function toSelected(a)
{
    alert([this,a])
}
li = document.createElement('LI');
li.appendChild(document.createTextNode('test'));
li.onclick =
li.onclick = function(){
    toSelected.call(li,1);
};
 document.body.appendChild(li);
</script>
</body>

</html>
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2014, 11:46
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от preproger
то в теле toSelected this у нас objectHTMLelement (мне это и нужно), а если вызов происходит через
Кто вызывает - того и this. В первом разе вызывает dom и там своя система связывания и не одна, во втором - js из window. Я сам с трудом ориентируюсь и поэтому забил на дом-ашние онклики.

Есть нормальный скриптовый объект Event через который все делается и будет только лучше все делаться в будущем.

li.addEventListener('click', my_func, false);

И там туева хуча возможностей по управлению событием, в этом Event кроме того.
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2014, 11:48
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

В частности вы можете вешать не всех подряд li, а только одного ul вздернуть. На дыбе он расколется через event какой именно li его сдал. Я про Event.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с onClick в IE 10 molnij Events/DOM/Window 20 06.04.2013 06:09
Ошибка формирования onclick в IE Pavel2012 Internet Explorer 2 23.11.2012 18:06
OnClick ячейки таблицы и ссылки в этой ячейке MasDen Javascript под браузер 2 30.06.2011 10:34
Как избавиться от каскадного onclick? GydruS Events/DOM/Window 2 24.02.2011 11:54
Событие onClick avtor01 Events/DOM/Window 3 03.09.2009 18:01