我正在使用触发器调用从自定义事件中获取值但是我希望它返回一个值,并且当我执行以下调用时它只给我一个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;
});
答案 0 :(得分:32)
您无法从触发器返回值,但您可以通过多种不同方式存储信息,一种方法是将对象用作参数:
//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
您可以做的另一件事是修改在事件外声明的变量,然后在调用触发器后使用它,或将其存储为具有{{事件的事件的元素中的属性1}}关键字如下:
this
希望它有所帮助。
编辑:
另外,使用//inside the event function
this.userId = 2;
//outside the event
$("element").trigger("click").get(0).userId
查看下面的@Arm0geddon answer,请注意它有一些副作用,比如没有冒充DOM层次结构。
答案 1 :(得分:23)
你可以做的是使用'.triggerHandler()'而不是'.trigger()'。这将返回一个值。 triggerHandler docs
var user_id=$("#my_div").triggerHandler("get_id", [username]);
答案 2 :(得分:2)
触发器无法返回响应,因为它是一种回调方法。
此外,jQuery有一个流畅的API,因此.trigger()
始终返回$(this)
你可以写$("#my_id").trigger(something).show().on(someelse)...
答案 3 :(得分:1)
trigger
函数不返回从事件处理程序返回的值。
返回jQuery object
...
.trigger(eventType [,extraParameters])返回:jQuery
这是为了你可以写这样的东西而设计的:
$("#my_div").trigger("get_id", [username]).val('foo').css('color', 'red');
答案 4 :(得分:1)
试试这个:
$("#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"]);
答案 5 :(得分:0)
triggerHandler是正确答案,但值得注意,因为我还没有在这里看到它...... 你也可以传递另一个回调函数,让你的“on”函数调用传递的回调来设置一些返回值等等。假设最好不要等待某些原因。