【问题标题】:scope variable in javascriptjavascript中的范围变量
【发布时间】:2015-06-27 23:47:31
【问题描述】:

我用这个插件 http://plugins.upbootstrap.com/bootstrap-ajax-typeahead/ 在网页上具有预输入功能。

我必须输入文本框。

一个是品牌卡,一个是模型车。

我输入 To,它会显示我丰田

when toyota is selected, i would like to see echo, matrix....

所以我设置了一个变量brandId来获取选择的值,但是在ulr中返回的值是

http://localhost:8080/brands/undefined/models?query=ech

但在显示网址之前,手表表达式中的 ibrandId = 1。

  $(document).ready(function () {
    var brandId;

    $("#brand").typeahead({
        onSelect: function(item) {
            debugger;
            console.log(item);
            //enable component
            $("#model").removeAttr("disabled");
            brandId = item.value;

        },
        ajax: {
            url: 'http://localhost:8080/brands',
            valueField: "brandId",
            displayField: "brand"
        }
    });

    $("#model").typeahead({
        ajax: {
            url: '/brands/' + brandId + '/models',
            valueField: "modelId",
            displayField: "model"
        }
    });
 }

【问题讨论】:

  • 不应该valueField: "brandId",valueField: brandId,?你也可以去掉var brandId;这一行,如果你在函数中分配一个未知变量,它会自动变成一个全局变量。
  • 试图更改 valueField 值,但得到相同的结果。我得到 brandId 没有在 url 属性中定义
  • @cari 依赖全局变量是不好的做法,而且在不警告未来用户或代码维护者的情况下这样做是非常不好的做法。最好将它们显式声明为全局变量(并对其进行评论)。如果做不到这一点,保存模块范围的对象会更好。

标签: jquery json twitter-bootstrap-3 typeahead.js


【解决方案1】:

问题是您正在使用一次性组合的 URL 实例化您的 #model 预输入。一旦将url 分配给'/brands/' + <current value of brand ID> + '/models',就永远不会重新分配它。

尝试将您的 typeahead 分配重构为一个单独的函数,当用户选择它时,您可以使用 brandId 的新值调用它:

$(document).ready(function () {
  var initModelTypeahead = function(brandId) {
      $("#model").typeahead({
          ajax: {
              url: '/brands/' + brandId + '/models',
              valueField: "modelId",
              displayField: "model"
          }
      });
  };

  $("#brand").typeahead({
      onSelect: function(item) {
          debugger;
          console.log(item);
          //enable component
          $("#model").removeAttr("disabled");
          initModelTypeahead(item.value);
      },
      ajax: {
          url: 'http://localhost:8080/brands',
          valueField: "brandId",
          displayField: "brand"
      }
  });

});

【讨论】:

  • 尝试将您的 #brand AJAX URL 更改为 /brands 而不是指定主机。您可能违反了同源政策。
  • 不修复模型 ajax 调用...永远不会完成,但品牌的那一个就可以了
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 2012-12-23
  • 2011-05-10
  • 2011-07-07
相关资源
最近更新 更多