Jquery:从触发器返回值

Pet*_*rim 25 jquery triggers

我正在使用触发器调用从自定义事件获取值但我希望它返回一个值,并且当我执行以下调用时它只给我Object对象:

var user_id=$("#my_div").trigger("get_id", [username]);
Run Code Online (Sandbox Code Playgroud)

我的触发事件函数如下所示:

$("#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;
});
Run Code Online (Sandbox Code Playgroud)

nic*_*elo 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
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用jQuerys .data()方法

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

您可以做的另一件事是修改在事件外声明的变量,然后在调用触发器后使用它,或者将其作为属性存储在具有带有this关键字的事件的元素中,如下所示:

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

//outside the event
$("element").trigger("click").get(0).userId
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

编辑:

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


Arm*_*don 24

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

var user_id=$("#my_div").triggerHandler("get_id", [username]);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,`triggerHandler`与触发器完全不同,这可能会导致意外的错误.文档涵盖了这些差异,例如不冒泡DOM层次结构或不导致事件的默认行为发生. (2认同)