Jquery: возвращение значения из триггера - PullRequest
25 голосов
/ 05 февраля 2012

Я использую вызов триггера для получения значения из пользовательского события, но я хочу, чтобы он возвращал значение, и он дает мне только объектный объект, когда я выполняю следующий вызов:

var user_id=$("#my_div").trigger("get_id", [username]);

Мое событие триггерафункция выглядит так:

$("#my_div").on("get_id", function(e, username){
    var user_id;
    if (username='fred'){
        user_id=1;
    }
    else if(username='mario'){
        user_id=2;
    }
    return user_id;
});

Ответы [ 6 ]

32 голосов
/ 05 февраля 2012

Вы не можете вернуть значение из триггера, но вы можете хранить информацию разными способами, один из способов - использование объекта в качестве параметра:

//event
$("element").on("click", function(event, informationObj) {
       informationObj.userId = 2; //you have to access a propery so you can modify the original object
});
//trigger
var informationObj = {userId : 0};
$("element").trigger("click", [informationObj ]); //informationObj.userId === 2

, другой способ - использование метода jQuerys .data().

//event
$("element").on("click", function() {
     $(this).data("userId", 2); 
});
//trigger
$("element").trigger("click").data("userId") //2

Другая вещь, которую вы можете сделать, - это изменить переменную, объявленную вне события, и затем использовать ее после вызова триггера, или , сохраняя ее как свойство в элементе, который имеетсобытие с ключевым словом this, например:

//inside the event function
this.userId = 2;

//outside the event
$("element").trigger("click").get(0).userId

Надеюсь, это поможет.

Редактировать:

Также взгляните на @ Arm0geddon ответ ниже, используя .triggerHandler(), просто имейте в виду, что у него есть некоторые побочные эффекты, например, не всплывает иерархия DOM.

24 голосов
/ 22 февраля 2013

Что вы можете сделать, это использовать .triggerHandler() вместо .trigger().Это вернет значение.

var user_id=$("#my_div").triggerHandler("get_id", [username]);
2 голосов
/ 05 февраля 2012

Триггер не может вернуть ответ, потому что это метод обратного вызова.

Кроме того, у jQuery есть плавный API, поэтому .trigger() всегда возвращает $(this).Вы можете написать $("#my_id").trigger(something).show().on(someelse)...

1 голос
/ 19 января 2014

Попробуйте это:

$("#my_div").on("get_id", function(e, username){
    var user_id;
    if (username='fred'){
        user_id=1;
    }
    else if(username='mario'){
        user_id=2;
    }
    return user_id;
});

var user_id=$("#my_div").triggerHandler("get_id", ["username"]);
1 голос
/ 05 февраля 2012

Функция trigger не возвращает значение, которое вы возвращаете из обработчика событий.

Возвращает jQuery object ...

.trigger (eventType [, extraParameters]) Возвращает: jQuery

документы

Это было разработано, чтобы вы могли написать что-то вроде этого:

$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red');
0 голосов
/ 26 февраля 2014

triggerHandler - правильный ответ, но стоит отметить, что я его здесь еще не видел ... Вы также можете передать другой обратный вызов, и ваша функция "on" вызовет переданный обратный вызов, чтобы установить некоторое возвращаемое значение и т.д.... при условии, что по какой-то причине лучше не ждать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...