jQuery 插件也适用于动态创建的元素

2023-11-26

我正在编写一个 jquery 插件,它应该处理链接上的额外信息以指定打开行为。

例如,我想支持如下标记:

  1. <a href="somewhere" data-openmode="NewWindow" class="openmode" />
  2. <a href="somewhere" data-openmode="Modal" class="openmode" />
  3. <a href="somewhere" class="openmode" /> <!-- Not specified -->

第一个应该在新窗口中打开,第二个应该在模式对话框中打开,第三个应该以本机行为打开(无论标签上设置了什么目标)。

我想为这种行为创建一个尽可能通用的插件。我现在已经写了:

(function ($) {
    $.fn.myOpenMode = function () {
        return this.mousedown(function () {
            var $this = $(this);

            var mode = $this.data("openmode");
            var href = this.href;
            var handled = true;
            if (mode) {
                switch (mode) {
                    case "NewWindow":
                    case "1":
                        window.open(href, "_blank");
                        break;
                    case "Dialog":
                    case "2":
                        openAsDialog(href);
                        break;

                    // Actually, there are other options, but I removed them for clarity

                    default:
                        handled = false;
                }
            }
            else {
                handled = false;
            }
            return !handled;
        });
    };
})(jQuery);

这段代码允许我从任何页面调用,例如:

$(function(){
    $(".openmode").myOpenMode();
});

这适用于静态生成的标签。但是,我的应用程序可能会动态生成标记(大多数时候使用 jsRender,但这并不重要)。

但由于此行为是在加载 javascript 文件时设置一次,因此它不会采用动态生成的对象。

我应该怎么做才能满足我的要求?

  1. 我尝试使用on方法来监视加载事件,但这不起作用:

    $(function(){
        $(document).on("load",".openmode", function() { $(this).myOpenMode(); });
    });
    

    我知道这不起作用,因为“加载”事件不会冒泡

  2. 我正在考虑修改我的插件以将“on”放入插件中,但我不喜欢这个想法,因为它在插件中引入了一些超出范围的行为

  3. 我还可以在每次创建动态节点时调用该插件,但它也会将依赖关系引入到其他部分。我的插件不会像我希望的那样自治。

有谁有建议来处理我的要求,使我的插件尽可能隔离?

[edit]这应该适用于 IE8 及更高版本(最好适用于其他浏览器)

[edit]这里有一个jsFiddle说明问题(只需单击Add并尝试单击新创建的元素)。


插件添加到$.fn应仅适用于列出的元素,而不适用于任何未来的元素。

你应该集中精力让你的插件提供机制, e.g.:

(function($) {

    $.fn.openmode = function(cmd) {
        cmd = cmd || 'on';

        switch (cmd) {

            case 'click':
                // read props, open windows, etc
                break;

            case 'on':
                this.addClass('openmode');
                break;

            case 'off':
                this.removeClass('openmode');
                break;
         }
    });

})(jQuery);

然后允许插件用户注册事件处理程序triggers该机制,必要时使用事件委托:

$(document).on('click', 'a.openmode', function() {
    $(this).openmode('click');
});

后面的代码也可以作为实用函数放入 jQuery 命名空间中:

(function($) {
    $.openmode = function(cmd) {
        cmd = cmd || 'on';

        switch (cmd) {

            case 'on':
                $(document).on('click.openmode', 'a.openmode', function() {
                    $(this).openmode('click');
                });
                break;

            case 'off':
                $(document).off('click.openmode', 'a.openmode');
                break;
        }
     };
})(jQuery);

这样只需调用:

$.openmode();

将完成为每个当前(和未来)启用插件所需的所有工作.openmode元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 插件也适用于动态创建的元素 的相关文章

  • 由于固定导航,增加了 FancyBox v2 的顶部和底部边距

    我目前正在开发一个网站 该网站将来将具有响应能力 该网站主要由图像组成 单击这些图像会加载到 FancyBox 中 FancyBox v2 现在具有响应能力 因此可以在屏幕尺寸发生变化时重新调整图像等的大小 作为我设计的一部分 我有两个固定
  • 如何模板化 Select2 的预选值

    我预先选择的值Select2 https select2 org如下所示 function formatState state console log state text2 I found undefined here console l
  • 数字和小数的输入掩码

    在测试我的程序后 我发现了以下错误 我在 sqlserver 中的表包含 价格数字 6 2 我的程序的用户输入价格 555 00 就很好了 但是当他输入 555555 时 这是错误的 所以我需要指定掩码 其中尾数是可选的 0 到 999 小
  • 如何让 jQuery 的自动完成插件在页面加载时显示其下拉列表?

    http community sciencecareers org mt static plugins CommunityPlus js autocomplete http community sciencecareers org mt s
  • 通过 JavaScript 检测浏览器换行

    我需要 javascript 来检测每个浏览器包装的文本行并将其包装到 span class line 我读过一些关于测量每个单词的 y 轴的文章 但还没有看到可靠的解决方案 这是我到目前为止所拥有的 看到它Jsfiddle http js
  • 正则表达式以任何顺序匹配查询中的所有单词

    我正在尝试为一个项目构建一个搜索功能 该功能根据用户搜索输入以及它是否与针对项目列出的关键字匹配来缩小项目范围 为此 我将项目关键字保存在data属性并使用 RegExp 模式将查询与这些关键字进行匹配 我目前正在使用这个表达式 我知道它不
  • jquery中文本区域自动调整大小

    我怎样才能做一个
  • Jquery:选择器找不到类?

    我正在尝试推进 Jquery autcomplete 功能 我希望 Jquery 自动完成在表中创建新行 到目前为止 这有效 但我希望 Jquery 添加一个删除按钮 因此用户可以删除他添加的项目之一 document ready func
  • JQuery hide() 和 fadeOut() 、 show() 和 fadeIn() 之间的区别

    我是 jQuery 新手 目前 我正在我的跨平台移动应用程序之一中使用 jQuery 我需要根据各自的条件隐藏和显示我的一些页面内容 我发现以下两种方法对我来说效果很好 myControlId fadeOut myControlId hid
  • 从 thymeleaf 获取数据到模态引导程序、jquery

    我正在尝试获取模态视图的 id 这是为了更新 onclick 元素 但我找不到方法 知道如何为 boostrap 5 完成此操作 或我可以用其他方法吗 谢谢 tr a inactivate a div class modal fade mo
  • 了解设置 JQuery 变量

    了解设置 JQuery 变量 最近 我通过在 StackOverflow 上遇到的另一个问题寻找帮助 了解到如何设置 JQuery 变量 如下所示 您可以通过简单地调用变量来创建输入字段 并且锚变量似乎也定义了样式 var clicked
  • ajax推送服务器

    好吧 我最近写了一个ajax推送脚本 其中后端的php在等待某人更新时处于休眠状态 但是休眠的进程占用了大量的cpu 关于如何防止这种情况的任何想法 我猜我必须要么找到一个可以使用线程休眠的程序 要么用我不太熟悉的 python 或 c 编
  • 删除某个类之后的所有类

    我有一个 lt div id thisdiv class class1 class2 class3 class4 class5 gt text lt div gt 我需要能够使用 jQuery 删除 class3 之后的所有类 就像是 th
  • jQuery 可以在用户输入数字时添加逗号吗?

    当用户输入数字时 如何动态添加逗号 有没有一个好的数字格式化程序可以提供帮助 我必须稍后添加这些数字 所以我最终必须删除一行中的逗号 但屏幕需要显示逗号以提高可读性 运行代码片段以查看其工作情况 input number keyup fun
  • 文件上传控件 OnChange 事件 JQuery

    我正在尝试使用 AJAX JQUERY 和 Net HTTPHandler 构建页面来上传文件 如下所示http dotnet dzone com news async file upload jquery and http dotnet
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • 动态地将工具提示文本设置为 div 元素

    我正在尝试动态地将工具提示文本设置为容器 div 并对我刚刚添加到有序列表的每个 div 元素 elem Alias Status 使用 jQuery function addNewElement elem var li li li li
  • jQuery 获取元素内的鼠标位置

    我希望制作一个控件 用户可以在 div 内单击 然后拖动鼠标 然后松开鼠标以指示他们想要的内容有多长 这是针对日历控件的 因此用户将指示特定事件的时间长度 看起来最好的方法是在父 div 上注册一个 mousedown 事件 而父 div
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会
  • 在 ASP.NET Core MVC 中访问从视图到控制器的隐藏值

    我需要帮助使用 jQuery 从 ASP NET Core razor 视图页面传递隐藏控件值 jQuery 用于获取动态控件选定的值 section scripts

随机推荐

  • 是否有 S3 策略限制访问只能查看/访问一个存储桶?

    我有一个简单的桶 看起来像images mysite com在我的 S3 和其他包含备份等的存储桶上 我想允许特定用户能够访问images mysite com存储桶以便上传图像 然而 我不想让他看到任何其他的桶 甚至不知道它们存在 我无法
  • MS Access 2003 不进入调试模式并忽略断点

    我在 MS Access 2003 模块中开发了一个小型 VBA 程序 只有一个公共子模块 该数据库仅对我锁定 其他人无法访问该文件 我的代码可以工作 但我想找到并修复一个小错误 我需要调试我的 VBA 代码 我在程序的第一行放置了断点 但
  • 多个 AWS 实例中的 MongoDB 负载均衡

    我们正在将 amazon Web 服务用于业务应用程序 该应用程序使用 Node js 服务器和 mongodb 作为数据库 目前 node js 服务器正在 EC2 介质实例上运行 我们将 mongodb 数据库保存在一个单独的微实例中
  • 以动画方式插入 ItemsControl

    我有时发现 WPF 难以理解 给定以下 XAML 如何添加触发器来为添加到 ObservableCollection 时间线的新项目添加动画 向下滑动 淡入 我见过各种列表框的例子 但没有看到项目控制的例子
  • 使用 Gradle 将所有创建的第三方 jar 复制到一个文件夹中

    我们有一个多项目 gradle 设置 每个子项目都有一个 Java jar root project sub project a sub project b sub project c 现在 因为我们正在创建一个 Java Webstart
  • 在 Google 数据存储(高复制)的单个事务中,有多少个对象“太多”?

    我有以下实体 不相关的字段 方法被删除 public class HitsStatsTotalDO Id transient private Long targetId public Key
  • 将 Rails Gem Active Admin 与关联结合使用

    我正在尝试新的 Rails gemhttp activeadmin info 而且效果很好 但是我找不到任何有关如何跨协会使用它的文档 例如 class Membership lt ActiveRecord Base belongs to
  • 在 PHPUnit 中,如何模拟不属于类的函数?

    我目前正在从事的项目包含面向对象和过程化 PHP 代码的混合体 所以我有这样的事情 function doStuff value x value 1 return x class MyClass private field public f
  • ACTION_USER_PRESENT、ACTION_SCREEN_ON、ACTION_BOOT_COMPLETED 的广播接收器

    我正在创建一个使用广播接收器的类 我想接收有关手机解锁的广播 但有一些问题 请帮帮我 我的 Manifest xml 是
  • 当表单再次显示时,单选按钮保存最后选中的而不是所需的按钮

    我有一些TRadioButtons on Form2并打电话Form2 from Form1用这个代码 procedure TForm1 btnCallForm2Click Sender TObject begin Form2 RadioB
  • Swift 异步加载图像

    我正在研究从 url 异步显示图像 我尝试创建一个新线程来下载图像 然后刷新main thread func asyncLoadImg product Product imageView UIImageView let downloadQu
  • 在 Spring Boot 中创建自定义 Jasypt PropertySource

    我正在使用 Spring Boot 创建一个访问数据库的简单 Web 应用程序 我通过设置来利用数据源的自动配置功能spring datasource 属性在application properties 一切都非常顺利 而且速度非常快 干得
  • 在 Libgdx 屏幕之间切换

    我仍在研究这个 libgdx 项目 并且正在尝试找出将屏幕更改为游戏屏幕的最佳方法 现在 当单击按钮时 我需要它转换到游戏屏幕 我已经看到了一些扩展游戏类的实现 但我不确定这里最好的方法是什么 这是主要的应用程序类 public class
  • Bootstrap 模式表单提交后不会关闭

    我需要做的是显示一个弹出窗口 向我的数据库添加一条新记录 我使用 bootstrap 3 我喜欢它 因为我没有使用一行 jquery 而且我有非常好的形式 显然它们是基于 jquery 我正在通过 ajax 验证我的表单 但现在的问题是我的
  • 为什么 .NET 中不检查异常?

    我知道谷歌搜索我可以找到合适的答案 但我更喜欢听听您的个人 也许是技术 意见 Java 和 C 在抛出异常方面存在差异的主要原因是什么 在 Java 中 抛出异常的方法的签名必须使用 throws 关键字 而在 C 中 您不知道在编译时是否
  • MySQL 选择 JOIN 3 个表

    我有三个基本表 tblUsers usrID usrFirst usrLast 1 John Smith 2 Bill Jones 3 Jane Johnson pm data id date sent title sender id th
  • WPF 日历:粗体指定日期?

    我正在创建一个窗口 该窗口使用 WPF 日历来浏览在所示月份的指定日期创建的文档 当日历更改月份时 我会在数据库中搜索该月创建的所有文档 并用它来创建该月内包含文档的日期列表 在日历控件中 我想将包含文档的日期加粗 就像 Outlook 将
  • 在 3D 中拟合直线

    是否有任何算法可以从一组 3D 数据点返回直线方程 我可以找到大量的资料来给出 2D 数据集中的直线方程 但没有一个是 3D 的 如果您试图从其他两个值中预测一个值 那么您应该使用lstsq与a参数作为自变量 加上一列 1 来估计截距 和b
  • 加快从 pyodbc 插入 SQL Server 的速度

    In python 我有一个从一个数据库中选择数据的过程 Redshift via psycopg2 然后将该数据插入到SQL Server via pyodbc 我选择执行读 写而不是读 平面文件 加载 因为行数约为每天 100 000
  • jQuery 插件也适用于动态创建的元素

    我正在编写一个 jquery 插件 它应该处理链接上的额外信息以指定打开行为 例如 我想支持如下标记 a href somewhere class openmode a a href somewhere class openmode a a