2010-08-18 4 views
3

Я не лучший в этом jquery-материале. Но я пытаюсь отделить действие от функции, поэтому я могу применить несколько событий, которые вызывают одну и ту же функцию. К сожалению, это не работает. Кто-нибудь знает, почему?Как применить несколько событий к одной и той же функции

Обновлено функции, но до сих пор ошибки

$(document).ready(function() { 

var $info_items = jQuery('.checkbox.has_info, .has_info'); 

$info_items.click(function(event) { 
$(this).show_text(event); 
}); 


// I suspect it has something to do with this initalizer of the function here 

jQuery.fn.show_text = function(event){ 
    var $info_item = jQuery(this); 
    $info_items.filter(function(index){ 
    return $(".hidden_text").css("display","block"); 
    }).not($info_item).parent().next().next().hide("slow"); 
    $info_item.parent().next().next().show("fast"); 
}); 

}); 
+0

В следующий раз используйте более подходящую тему. Возможно, что-то вроде «Как применить несколько событий к одной и той же функции». – Bart

ответ

7

Что такое e, событие? Вам нужно указать аргумент события функции click(), чтобы использовать его. Кроме того, чтобы вызвать show_text таким образом, что он имеет this, вам нужно вызвать его на элемент:

$info_items.click(function (event) { 
    // 'this' is the element in $info_items which was clicked 

    // invoke show_text on the element in question 
    $(this).show_text(event); 
}); 

У вас также есть дополнительный ) на вашей окончательной }); линии.

+0

Я подумал, что, возможно, мне пришлось передать ему мероприятие, чтобы «это» работало. Но я взял его, и он все еще ошибается. Я понимаю ваш пример, но я стараюсь не делать этого, чтобы у меня было несколько событий, запускающих ту же функцию. – Trip

+0

Спасибо за обновление. Я попробовал это, и он все еще бомбит. Если я прокомментирую всю функцию, это хорошо. ;). Может быть, синтаксис инициализации ошибочен на моем конце? – Trip

+0

Выполняете ли вы это внутри '$ (function() {})'? Что такое '$ info_items'? Без дополнительной информации мы не можем помочь. – meagar

2

Вы можете использовать jQuery bind для присоединения нескольких событий к одной функции.

$('#whatever').bind('mouseover focus click', function() { 
    your_custom_function(); 
}); 
2

Вы ищете что-то в этом роде?

var handle = function(event) { 
    $(event.currentTarget).show_text(event); 
}; 
$info_items.bind('click blur', handle); 
+0

Должен ли слушатель явно присутствовать после функции? – Trip

+0

, если вы определяете функцию своего обработчика как локальную переменную, да. Если вы определяете ее как именованную функцию (даже если ее локальная именованная функция), слушатель может прийти первым. – jdc0589

Смежные вопросы