【问题标题】:jQuery .live only works sometimesjQuery .live 有时只能工作
【发布时间】:2012-09-05 07:12:24
【问题描述】:

我有一个文本框和一个 DropDownList。 DropDownList 是根据文本框中的输入填充的。我遇到了一些问题,DropDownList 没有正确填充。

一个是当我在文本框中输入一些内容时,我可以选择到 DropDownList 并正确填充它。但是,如果我决定要更改文本框中的内容并在其中键入其他内容,然后尝试再次使用 Tab 键切换到 DropDownList,它不会更新。

另一个问题是,当我开始在文本框中输入内容时,我会弹出一个自动完成列表,我可以单击一个选项让它为我填充文本框,但是当我这样做时,DropDownList 没有被填充。

这是我必须填充 DropDownList 的 javascript。

$('#textFrame').live('change', function (event) {
    $.ajax({
        type: 'POST',
        url: '@Url.Action("GetDirectors", "HostScan")',
        data: { frame: $(this).val() },
        success: function (data) {
            var markup = '';
            for (var x = 0; x < data.length; x++) {
                markup += '<option value="' + data[x].Value + '">' + data[x].Text + '</option>';
            }
            $('#DirectorList').html(markup).show();
        }
    });

});

我应该改变什么来完成这项工作?

提前感谢您的帮助!

【问题讨论】:

  • 哟,.live 已弃用:api.jquery.com/live 如果您热衷于旧帖子:) stackoverflow.com/questions/11115864/… 希望它有所帮助,请阅读此内容。请尝试使用.on 事件
  • 我尝试过使用 .on,但我似乎根本无法让它工作。甚至达不到我 .live 工作的水平。
  • 我认为您需要将您的 Jquery 升级到此:&lt;script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'&gt;&lt;/script&gt; then.on` api 将被识别! :)
  • 你说得对,升级到 jQuery 可以识别 .on ,但这并不能完全解决我的问题。仅使用 .on 而不是 .live 时,我仍然遇到同样的问题。不过谢谢!

标签: jquery


【解决方案1】:

第一件事是 .live 从 jQuery 1.7.0 开始被弃用。尝试改用 .on。

第二次使用google cdn托管的jquery文件。这将有助于减少您网站的带宽。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>

对于代码,请在添加新值之前尝试清除选项。这样可以确保您不会在之前的选项中添加新选项。

$(function(){

    $('#textFrame').on('change', function () {
        $.ajax({
            type: 'POST',
            url: '@Url.Action("GetDirectors", "HostScan")',
            data: { frame: $(this).val() },
            success: function (data) {
                if(data != null){
                var markup = '';
                $('#DirectorList').find('option').remove();
                    for (var x = 0; x < data.length; x++) {
                        markup += '<option value="' + data[x].Value + '">' + data[x].Text + '</option>';
                    }
                $('#DirectorList').append(markup).show();
                }
            }
        });
    });
});

【讨论】:

  • 使用您的解决方案,DropDownList 根本没有被填充。而且我读过 .live 不好用,但我用你的解决方案尝试了它而不是 .on ,它解决了我的第一个问题。非常感谢你的帮忙。但是,如果我单击自动完成文本框的选项,我仍然无法在 DropDownList 中获得正确的输出。您知道为什么会发生这种情况吗?我没有切换到您建议的 jQuery 脚本,所以这可能是问题所在。我可以试试。
  • 好的,所以更新到你建议的 jQuery 并且 .on 现在可以工作了,但我仍然遇到同样的问题,无法从文本框的自动完成列表中选择一个值并且有填充的 DropDownList。
  • 即使我在使用 jQuery AutoComplete 时也遇到了同样的问题。当您从自动完成中选择一个选项时,由于某种原因它不被视为更改事件。所以我还必须为模糊事件编写代码。这种方法还有一个问题。此事件将触发两次,一次是当您从 autocomplete 中选择一个选项时,另一次是当下拉菜单失去焦点时。所以您需要仔细选择您的事件以完成任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多