Подтвердить что ты не робот

JQuery: Возвращаемое значение из триггера

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

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;
});
4b9b3361

Ответ 1

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

//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

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

Edit:

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Он возвращает jQuery object...

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

docs

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

$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red');

Ответ 5

Попробуйте следующее:

$("#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"]);

Ответ 6

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