【问题标题】:jQuery arguments passed to event-handler are evaluated on binding传递给事件处理程序的 jQuery 参数在绑定时进行评估
【发布时间】:2014-05-17 02:17:39
【问题描述】:

我有以下代码:

var profileToRemove = null;

//...

$("#buttonRemoveProfile").on("tap", {profile : profileToRemove}, removeProfile);

//...

function removeProfile(event){
   console.log(event.data);
   var profile = event.data.profil;
   if(profile==null || profile.name==null) {
      alert("Erreur lors de la suppression du profil");
   }
   else { /*remove profile*/ }
}

在点击“#buttonRemoveProfile”之前,“profileToRemove”被设置为所需的值(不是 null!)。 然而,我的函数 removeProfile 接收“null”(event.data 为 {profile : null})或 profileToRemove 的初始值。

那么如何将 removeProfile 的当前值传递给我的处理程序?

谢谢!

【问题讨论】:

    标签: javascript jquery event-handling argument-passing evaluation


    【解决方案1】:

    on() 中的 data 参数接受一个对象,并且该对象的值在绑定时被锁定,以后更改 profileToRemove 变量不会以任何方式更新 event.data.profile(您输入错误)。

    PROOF

    因为你已经有一个更高范围的变量,直接使用它似乎更容易

    var profileToRemove = null;
    
    $("#buttonRemoveProfile").on("tap", removeProfile);
    
    //...
    
    function removeProfile(){
       if( profileToRemove === null || profileToRemove.name === null) {
          alert("Erreur lors de la suppression du profil");
       } else { 
          /*remove profile*/ 
       }
    }
    

    【讨论】:

      【解决方案2】:

      更改您的设计,使数据包含返回所需内容的函数:

      $("#buttonRemoveProfile").on("tap", {profile : function() {
              return profileToRemove;
          }
      }, removeProfile);
      
      function removeProfile(event){
         console.log(event.data);
         var profile = event.data.profile(); // Call the profile function
         if(profile==null || profile.name==null) {
            alert("Erreur lors de la suppression du profil");
         }
         else { /*remove profile*/ }
      }
      

      如果你想变得花哨,你可以让配置文件成为一个函数或数据,并使用:

      var profile = event.data.profile;
      if (typeof profile == "function") {
          profile = profile();
      }
      

      【讨论】:

        猜你喜欢
        • 2013-08-16
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多