2013-09-30 103 views
0

在这个例子中,我试图遍历传递给点击处理程序的对象的属性,但我得到了意想不到的结果。 Here's小提琴将对象传递给事件jQuery

所以用JS脚本像

$(document).ready(function() 
     { 

      Label = function (name, toDate, fromDate) 
      { 
       this.name = name; 
       this.toDate = toDate; 
       this.fromDate = fromDate; 
      } 

      lbl = new Label('John', 'Today', 'Yesterday'); 


      $('#btnSubmit').click(function() 
      { 
       for (var i in lbl) 
       { 
        console.log(i); 
       } 
      }); 
      $('#btnSubmit2').click(function (Label) 
      { 
       for (var i in Label) 
       { 
        console.log(i); 
       } 
      }); 
     }); 

我为什么不能传递一个对象在点击事件的功能和遍历其属性,而不是使用forin循环像我一样的在btnSubmit的例子?

+0

你的编号问题是很难理解的,即使你的全球性问题似乎很清楚。 –

+0

你将如何获得'btnSubmit2'处理程序中的标签?因为你命名变量'Label'?它只是参数名称... – NDM

+0

@dystroy编辑为什么是最紧迫的我。 – wootscootinboogie

回答

2

回调总是以事件作为参数调用。当你写click(function(Label){时,你只给这个事件变量名称Label(因此影射你的外部构造函数)。

但你可以访问外部范围定义的变量,所以你想要的东西可能是

var lbl = new Label('John', 'Today', 'Yesterday'); 
$('#btnSubmit').click(function(){ 
    for (var i in lbl) { 
     console.log(i, lbl[i]); // for example "name", "John" 
    } 
}); 
+0

这在我的第二个小提琴例子中是有道理的,因为我有很多属性我不熟悉,我认为是事件对象的属性。 – wootscootinboogie

+0

@wootscootinboogie准确无误。 –

+0

这是有帮助的。我的思路是什么我可以传递被点击的对象的类型,并且有一个工厂方法被调用来创建该类型的对象(类似于..每个属性的span标记,并将其绑定到页面) 。很高兴知道我正在走错错误的兔子洞:) – wootscootinboogie