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;
});
Ответы
Ответ 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" вызовет пройденный обратный вызов, чтобы установить некоторое возвращаемое значение и т.д., Полагая, что лучше не ждать по какой-либо причине.