【问题标题】:Text field wont update when data pulled from xml从 xml 中提取数据时,文本字段不会更新
【发布时间】:2012-01-08 11:40:15
【问题描述】:

好的,我有一个选择下拉菜单,下面是一个文本字段。如果我填充一个静态文本字段并单击其选项,我想用选择下拉列表中选择的值填充文本字段。它工作正常。 这是一个

DEMO

现在我正在从 xml 中提取下拉选择选项,当我再次使用它在单击其选项时更新我的​​文本字段时,它不起作用;

这是DEMO

我知道在第二个演示中,xml 不在正确的位置,但我已经在本地机器上测试过,但它不起作用。

感谢任何帮助。 谢谢

【问题讨论】:

  • 我不知道是谁投了反对票,出于什么原因,他们应该在评论中提到它

标签: javascript jquery xml ajax jquery-selectors


【解决方案1】:

我假设您实际上是在使用多项选择。如果是这样,只需将处理程序绑定到 select 元素即可:

$(".generalTemplate").click(function() {
    var su = $(this).find(':selected').text();
    $("#sub").val(su);
});

这会在单击时找到选定的元素,并且在插入后不需要绑定到单个 option 元素。

如果您不使用复数,则需要绑定到 change 事件。

$(".generalTemplate").change(function() {
    var selected = $(this).find(':selected');
    if( selected.index() > 0 ) {
        var su = selected.text();
        $("#sub").val(su);
    }
});

最终,发生的事情是 异步 AJAX 调用正在执行其回调函数您运行代码以绑定处理程序之后。

换句话说,代码在执行之前不会等待 AJAX 响应到达。通过绑定到 select 本身,您知道它已经在文档中可用,因此不存在同步问题。

【讨论】:

  • 另外,如果你确实需要绑定到异步创建的元素,看看使用.live:api.jquery.com/live
  • 谢谢,但我不认为点击和更改在这里会有很大的不同,我都试过了,它们都有效。
  • @Mike:随便。你明白答案的重点吗?绑定到 select 元素而不是 option 元素,您将不再有同步问题。我仍然认为你会需要change,但如果你认为click 会起作用,那么就使用它。但如果/当它没有,请改用change
  • 我可以原谅我使用 jquery 编写的 html 中的第一个选项吗?它不是来自 xml。它就像一个默认位置,上面写着“加载选项”
  • @Mike:我更新以测试所选元素以确保它不是第一个。
【解决方案2】:

你可以试试live:

$(".generalTemplate >option").live("click",function() {


                    var su = $(this).text();
                    $("#sub").val(su);
                });

【讨论】:

  • 为什么 live 与其他选项不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多