Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.01.2012, 00:22
Аспирант
Отправить личное сообщение для IONEX Посмотреть профиль Найти все сообщения от IONEX
 
Регистрация: 08.01.2012
Сообщений: 32

Передача дополнительной информации в функцию по событию click
Необходимо передать дополнительные параметры в функцию click. Пересмотрел кучу примеров, везде передается пустая (только eventObj) переменная. Как бы дописать туда доп. значения?

Сделал свою реализацию, но не работает:

<script language="javascript">
        $(document).ready( function () {
            var li_tabs=$('#horisontal-tabs li');//Запоминаю все элементы меню в переменную li_tabs
            
	        $('#horisontal-tabs li').click({tabs:'$li_tabs'},activeElement);//Пытаюсь дозаписать список переменной li_tabs
            
            function activeElement(obj) {
	           $(obj.tabs).filter("*[class='active']").each(function (){
	               $(this).toggleClass('active unactive');
	           });
	           $(obj.target).toggleClass('active unactive');
            }
        });
    </script>

Последний раз редактировалось IONEX, 15.01.2012 в 00:36. Причина: Поспешил с кодом, исправил...
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2012, 00:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Прочитайте хелп по jquery. тогда вопросы сами отпадут
$('body').click({ foo :"bar"}, function(e){
    alert(e.data.foo);
});
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2012, 01:26
Аспирант
Отправить личное сообщение для IONEX Посмотреть профиль Найти все сообщения от IONEX
 
Регистрация: 08.01.2012
Сообщений: 32

Спасибо за ссылку, все понятно, нужно использовать bind для этого, а для обращения к доп. переменной через запись eventOBJ.data. с этим разобрались...

Но хотелось бы отказать от конструкции приведенной в примере:


$('#foo').bind('click', {msg:'Spoon!'}, function(eventObject){
  alert(eventObject.data.msg);
});


а заменить на (так наглядней):

$('#foo').bind('click', {msg:'Spoon!'}, eventfunc);

function eventfunc(eventObject) {
  alert(eventObject.data.msg);
};


Реализация моего кода:

Согласно конструкции приведенной в Хелпе:

<script language="javascript">
        $(document).ready( function () {
            var li_tabs=$('#horisontal-tabs li'); 
            
	        $('#horisontal-tabs li').bind('click', {tabs:'$li_tabs'}, activeElement(obj){
	           $(obj.data.tabs).filter("*[class='active']").each(function (){
	               $(this).toggleClass('active unactive');
	           });
	           $(obj.target).toggleClass('active unactive');
            });
        });
    </script>


С вызовом отдельной процедурой:

<script language="javascript">
        $(document).ready( function () {
            var li_tabs=$('#horisontal-tabs li'); 
            
	        $('#horisontal-tabs li').bind('click', {tabs:'$li_tabs'}, activeElement(obj));
            
            
            function activeElement(obj) {
	           $(obj.data.tabs).filter("*[class='active']").each(function (){
	               $(this).toggleClass('active unactive');
	           });
	           $(obj.target).toggleClass('active unactive');
            };
            

        });
    </script>


Ни в каком виде не заработало, при обработке просто click (без bind), без передачи доп. данных все работает.
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2012, 17:11
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от IONEX Посмотреть сообщение
Спасибо за ссылку, все понятно, нужно использовать bind для этого, а для обращения к доп. переменной через запись eventOBJ.data. с этим разобрались...
не обязательно bind. я же код кинул.
Сообщение от melky Посмотреть сообщение
$('body').click({ foo :"bar"}, function(e){
    alert(e.data.foo);
});
Сообщение от IONEX Посмотреть сообщение
Реализация моего кода:
<script language="javascript">
        $(document).ready( function () {
            var li_tabs=$('#horisontal-tabs li'); 
            
	        $('#horisontal-tabs li').bind('click', {tabs:'$li_tabs'}, activeElement(obj));
            
            
            function activeElement(obj) {
	           $(obj.data.tabs).filter("*[class='active']").each(function (){
	               $(this).toggleClass('active unactive');
	           });
	           $(obj.target).toggleClass('active unactive');
            };
            

        });
    </script>
скажите, а вы что передаёте и что хотите получить в результате?

ваша ошибка кроется тут :

$('#horisontal-tabs li').bind('click', *!*{tabs:'$li_tabs'}*!*, activeElement(obj));

значение неверное. вы передаёте строку. скажите, вы знакомы с типами в JS ?

ещё одна ваша ошибка находится здесь :

$('#horisontal-tabs li').bind('click', {tabs:'$li_tabs'}, *!*activeElement(obj)*/!*);


вы знаете, что делают скобки () в javascript ? стоя после идентификатора, они вызывают функцию, передавая ей аргументы. тут вы запускаете функцию на выполнение, передавая ей несуществующую переменную obj.

.....

вам необходимо передать объект. следать это можно так :
$(document).ready( function () {
            var li_tabs=$('#horisontal-tabs li'); 
            
	        $('#horisontal-tabs li').bind('click', { tabs: li_tabs }, activeElement);
            
            
            function activeElement(obj) {
	           $(obj.data.tabs).filter("*[class='active']").each(function (){
	               $(this).toggleClass('active unactive');
	           });
	           $(obj.target).toggleClass('active unactive');
            };
            

        });


можно было и не заморачиваться с передачей данных. я бы сделал по-другому, учитывая возможности jQuery и используя их по-максимуму :

$(document).ready(function() {
    var li_tabs = $('#horisontal-tabs li').click(activeElement);
    
    function activeElement(obj) {
        li_tabs.
            filter(".active").
                add(obj.target).
                    toggleClass('active unactive');
    };
    
});
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2012, 17:24
Аспирант
Отправить личное сообщение для IONEX Посмотреть профиль Найти все сообщения от IONEX
 
Регистрация: 08.01.2012
Сообщений: 32

Спасибо за помощь, ошибки действительно плевые! Передавать доп. данные хотел поскольку думал что li_tabs будут не видны в процедуре activeElement.

Последний вариант снимает все проблемы!
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2012, 17:26
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от IONEX Посмотреть сообщение
Спасибо за помощь, ошибки действительно плевые! Передавать доп. данные хотел поскольку думал что li_tabs будут не видны в процедуре activeElement.
ошибаетесь, будут. у вас пробелы в знаниях JS. было бы неплохо пролистать http://learn.javascript.ru
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача в функцию переменного количества аргументов Эдди Элементы интерфейса 35 09.11.2018 15:25
передача переменной в функцию timeout alfmaster Javascript под браузер 5 20.09.2011 18:40
Передача значения из функции в функцию wine-time Общие вопросы Javascript 4 18.09.2011 17:39
Передача параметров с сервера в функцию mikel Events/DOM/Window 2 29.08.2011 21:18
передача динамических данных в функцию Ruah Общие вопросы Javascript 4 02.09.2009 22:04