0

我是 jQuery 的新手。所以请告诉我如何this在循环中使用变量。

例如。

this.tblsize=10;
$.each([1,2],function(idx,val){
console.log(this.tblsize)
});

输出

undefined
undifined

但我需要将输出作为10 10.

哪里不对了?

4

6 回答 6

2

您需要使用闭包才能this从不同的范围访问:

this.tblsize=10;
var self = this;
$.each([1,2],function(idx,val){
    console.log(self.tblsize)
});
于 2013-01-07T11:58:57.553 回答
1

只是不要使用它,使用任何其他变量名:

var tblsize=10;
$.each([1,2],function(idx,val){
console.log(tblsize)
});
于 2013-01-07T11:58:27.897 回答
0

你不能使用这个inside匿名函数,因为它是另一个范围。

这应该工作

    this.tblsize=10;
    var thisref = this;

    $.each([1,2],function(idx,val){
    console.log(thisref.tblsize)
    });
于 2013-01-07T11:57:38.273 回答
0

this在调用 $.each 之前创建一个副本。在 $.eachthis中将引用$.each().

this.tblsize=10;
var $this = this;
$.each([1,2],function(idx,val){
    console.log($this.tblsize)
});

http://api.jquery.com/each/

于 2013-01-07T12:04:40.823 回答
0

只需尝试以下示例:

<ul>
    <li>foo</li>
    <li>bar</li>
</ul>

$( "li" ).each(function( index ) {
  console.log( index + ": "" + $(this).text() );
});

我认为这可以帮助您解决问题。

于 2013-01-07T12:01:14.593 回答
0

让我们看看你的代码:

this.tblsize = 10;

此处,该tblsize值已在范围之外指定$.each()

接下来如果你这样做:

$.each([1,2],function(idx,val){
      console.log(this)
});

您将获得类似1&的值2,因为this这里指的是$.each()方法的内部结果范围。所以,在你的情况下,如果你做类似的事情this.tblsize,你肯定会得到类似的东西,undefined因为每个里面都没有这个名字的变量。

因此,要获得您想要的,您可以简单地创建一个循环全局对象,将外部范围变量存储在其中并在$.each()方法内部访问它,例如:

this.tblsize = 10;

// circular global object
var table_size = this;

$.each([1,2],function(idx,val){
      console.log(table_size.tblsize);        // way 1
      console.log($(table_size)[0].tblsize);  // way 2
});
于 2013-01-07T12:08:32.433 回答