Jquery:从触发器返回值

我正在使用触发器调用从自定义事件获取值但我希望它返回一个值,它只在我执行以下调用时给出了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; }); 

您不能从触发器返回值,但您可以以多种不同方式存储信息,一种方法是使用对象作为参数:

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

希望能帮助到你。

编辑:

另外,使用.triggerHandler()查看下面的@ Arm0geddon答案 ,请注意它有一些副作用,比如没有冒泡DOM层次结构。

你可以做的是使用’.triggerHandler()’而不是’.trigger()’。 这将返回一个值。 triggerHandler文档

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

触发器无法返回响应,因为它是一种回调方法。

另外jQuery有一个流畅的API,所以.trigger()总是返回$(this)
你可以写$("#my_id").trigger(something).show().on(someelse)...

trigger函数不返回从事件处理程序返回的值。

它返回jQuery object

.trigger(eventType [,extraParameters])返回:jQuery

文档

这是为了你可以这样编写的东西:

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

试试这个:

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

triggerHandler是正确的答案,但值得注意,因为我还没有在这里看到它…你也可以传递另一个回调,并让你的“on”函数调用传递的回调来设置一些返回值等假设它是最好不要等待某些原因。