jquery字符串插值导致问题

时间:2012-10-03 21:25:19

标签: javascript jquery jquery-tokeninput string-interpolation

我正在使用jquery tokeninput插件,我希望json令牌输入数据依赖于可以在表单中某处找到的值。 我的代码如下所示:

jQuery(function() {
  var bparam;
  if ($('#tokens')) {
    bparam = $('#select_menu').val();
    return $('#tokens').tokenInput(("/tokens.json?b=" + bparam)({
      theme: 'facebook',
    }));
  }
});

因此,如果select_menu div中的值为124,则插件应该发出请求,例如/tokens.json?b=124。

不知怎的,这不起作用,我不知道为什么。我还是一个javascript新手。 任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

if ($('#tokens'))将返回一个空数组([]),因此无论什么总是会评估为true。我猜你想要if ($('#tokens').length)。如果数组中有一个项目,它将评估为true,如果它为空,则计算结果为false。

什么在绊倒你是在设置变量时。正在设置页面加载bparam。当触发事件发生时,我会将其绑定为设置。

答案 1 :(得分:0)

除了长度> 0调用我必须做(感谢指出Stuart Nelson和Shusl!),事实证明,coffeescript中的字符串插值在某种程度上并不像我想要的那样工作。翻译成javascript的相同代码确实有效。 Coffeescript正被翻译成:

jQuery(function() {
  var bparam;
  if ($('#tokens').length > 0) {
    bparam = $('#select_menu').val();
    return $('#tokens').tokenInput(("/tokens.json?b=" + bparam)({
      theme: 'facebook',
    }));
  }
});

现在,直接用javascript / jquery编写的工作代码是:

jQuery(function() {
if ($("#tokens").length > 0) {
    var bparam
    bparam = $('#select_menu').val();
      return $('#tokens').tokenInput("/tokens.json?b=" + bparam, {
        theme: 'facebook',
      });
   }
});

请注意

中的这些额外括号
(("/tokens.json?b=" + bparam)

,而

("/tokens.json?b=" + bparam 

是工作解决方案。