Передача дополнительной информации в функцию по событию 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>
|
Прочитайте хелп по jquery. тогда вопросы сами отпадут
$('body').click({ foo :"bar"}, function(e){
alert(e.data.foo);
});
|
Спасибо за ссылку, все понятно, нужно использовать 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), без передачи доп. данных все работает. |
Цитата:
Цитата:
Цитата:
ваша ошибка кроется тут :
$('#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');
};
});
|
Спасибо за помощь, ошибки действительно плевые! Передавать доп. данные хотел поскольку думал что li_tabs будут не видны в процедуре activeElement.
Последний вариант снимает все проблемы! |
Цитата:
|
| Часовой пояс GMT +3, время: 15:53. |