【问题标题】:avoid function closure in javascript避免javascript中的函数关闭
【发布时间】:2013-10-03 11:56:04
【问题描述】:

我想用类“liveVariable”将回调链接到每个输入(输入文本):

$(".liveParameter").keyup(function(){
    var callBackString= 'skp:change-'+$(this).attr('id')+'@'+$(this).attr('value');
    window.location = callBackString;               
});

但是,这给了我一个奇怪的错误。传递的值是输入字段的初始值(每次触发事件时)。

我不明白为什么这不起作用。我不认为我有一个闭包,局部变量 callBackString 是在 in 被调用函数中创建的。所以每次都应该创建?

我怎样才能优雅地解决这个问题? (我不想为每个输入字段创建一个调用,因为我有很多实时参数..)

【问题讨论】:

  • $(this).attr('value') 更改为 $(this).val()
  • 另外,为了我的强迫症,把$(this).attr("id")改成this.id
  • 有趣的@Archer...好处?
  • @ChrisKempen 不构造一个巨大的 jQuery 对象只是为了获取可以直接使用this.id 访问的元素的 id 的好处? :)
  • 但是$ 看起来很漂亮! xD

标签: javascript jquery function closures


【解决方案1】:

尝试改变:

var callBackString= 'skp:change-'+$(this).attr('id')+'@'+$(this).attr('value');

...到:

var callBackString= 'skp:change-'+$(this).attr('id')+'@'+$(this).val();

有关.val() 函数的更多详细信息,请访问jQuery docs website here

编辑:

为了优雅、性能和评论贡献,以下解决方案最终将是最好的:

$(".liveParameter").keyup(function(){
    var input = $(this);
    var callBackString = 'skp:change-' + input.attr('id') + '@' + input.val();
    window.location = callBackString;
});

【讨论】:

    【解决方案2】:

    更改您的代码

    $(this).attr('value'); // get the initial value
    
    $(this).val(); // get the current and updated value
    

    http://jsfiddle.net/FjgLB/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2015-07-19
      • 2011-02-11
      • 1970-01-01
      • 2011-12-31
      • 2019-03-18
      • 2012-01-30
      相关资源
      最近更新 更多