【问题标题】:jQuery binding - how can I bind the result of this Ajax call to the document?jQuery 绑定 - 如何将此 Ajax 调用的结果绑定到文档?
【发布时间】:2015-12-11 00:09:05
【问题描述】:

我正在这样做:

jQuery("#country_id").change(function() {
    id = jQuery("#country_id").val();
    jQuery.ajax({
        type: "GET",
        url: 'index.php?option=com_jomdirectory&task=getprovince&format=raw&type=province',
        dataType: "html",
        data: "id=" + id,
        success: function(data) {
            jQuery('#provincelist').html(data).find('select').addClass("form-control chosen-select").chosen();
        }
    });
});

问题是,这没有绑定到文档,所以当我尝试触发下一个 ajax 调用(检索城市列表)时,

我基本上有 3 个选择:

1) 国家 - onchange 触发 ajax 调用以获取省份(这有效并给了我省份选择列表)

2) 然后当改变省份时,它应该触发一个 ajax 调用来选择城市

3) 城市 ajax 调用不会触发。

如何将结果绑定到文档,以便在更改时触发下一个 ajax 调用,而无需过多地摆弄这段代码?

谢谢,

J

【问题讨论】:

  • 绑定到文档?你是什​​么意思?这会在#country_id 更改时成功执行,对吧?
  • 很不清楚你想要达到什么目的
  • @PraveenKumar 我的下一个 ajax 调用不会触发,因为它本身就是 ajax 调用的结果。我基本上有3个选择:1)国家->省->城市,当我改变国家(省份选择显示)时它可以工作,但是当我改变省份时,什么也没有发生——城市的ajax调用不会触发。
  • 在您的示例中,您仅在 country 下拉列表中添加了更改侦听器。您是否也为provincecity 下拉菜单定义了类似的更改侦听器?

标签: javascript php jquery ajax


【解决方案1】:

@PraveenKumar 我的下一个 ajax 调用不会触发,因为它本身 ajax 调用的结果。我基本上有3个选择:1) Country->Province->City,当我更改国家/地区时它可以工作( 省选择显示)但是当我改变省份时,什么也没有发生 - ajax 对 city 的调用不会触发。

您需要为您的选择使用事件委托。

jQuery("#provincelist").on('change', '#province_id', function() {

当您使用 jQuery('#provincelist').html(data) 替换选择时,您将丢失 province 选择上的更改事件,因为您正在替换整个元素。

【讨论】:

  • 我怀疑这是一个授权问题。 OP 没有提到他是否真的在 province 下拉列表中定义了一个更改侦听器。
  • @Arkantos 但是当我改变省份时,什么都没有发生
  • 如果 OP 忘记添加事件侦听器,则不会发生任何事情 :) 我们需要在此处确认是否是这种情况。
  • 所有的选择都有变化的监听器。我为解决这个问题所做的是创建一个空选择(只有一个选项),然后 ajax 响应替换选项。这样我就避免了事件委托问题。
猜你喜欢
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2015-11-25
  • 2012-10-21
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
相关资源
最近更新 更多