不明白为什么警报给我正确的结果,而功能不执行javascript

时间:2017-01-10 18:53:02

标签: javascript jquery

我有三个按钮。想法是在单击#1时更改按钮ID#11和#12上的文本。

$(document).ready(function() {
    var dict = {#1: ['#11', '#12']}

    $('button').click(function () {
        var k = dict['#'+$(this).attr('id')]

        for (c in k){
            var m = k[c]
            $(m).button('it works')
        }
    })
});

现在的问题是:如果我致电alert(m),我会得到正确的结果,但它不适用于$(m).button('it works')。知道为什么吗?

3 个答案:

答案 0 :(得分:4)

与您的代码相关的示例HTML:

<button id="1">
  Ohay
</button>

<button id="11">
  hehe
</button>

<button id="12">
  haha
</button>

更正javascript:

$(document).ready(function() {
  var dict = {'#1': ['#11', '#12']}

  $('button').click(function () {
      var k = dict['#'+$(this).attr('id')]
      for (c = 0; c < k.length; c++){
          var m = k[c]
          $(m).text('it works')
      }
  })
});
据我所知, .button 原型不是标准的jQuery原型,因此我可能怀疑你想要使用 .text

此外,请注意,您应该使用常规替换 for..in 周期(因为您正在循环数组,而不是对象),尽管它可以在特定情况下使用,请查看此参考:why shouldn't I use for..in with arrays

工作小提琴:

https://jsfiddle.net/gLnfo2h8/

答案 1 :(得分:3)

使用$(m).text('it works').button()不是jQuery函数

答案 2 :(得分:1)

如果mbutton目标,那么您只需要设置它value

jQuery has no function called button. the right solution would be:
$(m).text('some text')

如果按钮实际上是<input type='button',那么您可能需要执行以下操作:

$(m).val('some text')

解决方案就是这样:

$(document).ready(function() {
var dict = {#1: ['#11', '#12']}

$('button').click(function () {
    var k = dict['#'+$(this).attr('id')]

    for (c in k){
        var m = k[c]
        $(m).val('it works')
    }
})
});