【问题标题】:jQuery select elements loaded via Ajax通过 Ajax 加载的 jQuery 选择元素
【发布时间】:2011-06-24 14:27:52
【问题描述】:

以下代码运行一个简单的自动建议任务,它本身运行良好。问题是当通过 AJAX 将“ausu-suggest”类的 div 带到页面时,它不会运行。

div 内部是一个表单域。当您开始在表单域中输入内容时,自动建议就会启动。

我知道我可能应该使用 live() 函数,但我不确定语法,因为这与特定事件无关。即,下面的函数甚至不需要 change() 或 onKeyUp() 即可运行。

$.fn.autosugguest({
             className: 'ausu-suggest',
             methodType: 'POST',
             dataFile: "<?=site_url('survey/search_city')?>",
             minChars: 3,   
             rtnIDs: true,
        });

编辑:实际的插件代码在这里http://discussion.oslund.ca/2011/01/a-simple-jquery-ajax-autosuggest-plugin/

【问题讨论】:

  • 我认为我们需要查看实际的插件代码。
  • 上面的 sn-p 就是所有需要的,包装在 $(document).ready() 中。
  • 尽管如此,但我应该如何在没有插件代码的情况下知道这些字节的含义?您链接的代码正在扩展 jQuery 基本功能,添加自定义插件。对不起,我不知道它是什么类型的插件。

标签: jquery


【解决方案1】:

JavaScript 代码是在某个时刻应用的。它只会应用于当前页面上的内容,并且不会因为 DOM 更改而在以后自动重新运行。你对此负责。

在您的 AJAX 成功函数中,您只需在新内容加载到 DOM 后重新应用自动提示插件即可。

(作为旁注,jQuery 有一个 live 函数,可用于在新元素在 DOM 中弹出时自动将事件处理程序应用于新元素,但 jQuery 通过将处理程序附加到祖先元素来检查用于 DOM 更改,然后重新加载事件处理程序。技术上不是自动的。)

编辑:(示例)

$.fn.autosugguest({
         className: 'ausu-suggest',
         methodType: 'POST',
         dataFile: "<?=site_url('survey/search_city')?>",
         minChars: 3,   
         rtnIDs: true,
    });

$.ajax({
    url: 'http://domain.com/ajax',
    success: function (data) {
        // Write new input to DOM

        $.fn.autosugguest({
            className: 'ausu-suggest',
            methodType: 'POST',
            dataFile: "<?=site_url('survey/search_city')?>",
            minChars: 3,   
            rtnIDs: true,
        });
    }
);

【讨论】:

  • 你将如何“重新应用”插件?
  • 您重新运行最初使用的代码。这里唯一的潜在问题是插件是否足够智能以检测它是否已经在元素上运行。例如,如果您已经在页面上有一个自动建议输入,在其上运行插件 onload,然后添加一个新输入并再次运行插件以点击该输入,它是否会将另一个版本应用于第一个?一个设计良好的插件不会,但即使是这样,您也可以通过为动态加载的类使用不同的类来解决这个问题,并在运行插件代码时匹配该新类而不是原始类。
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多