如何调用嵌套在 JQuery 插件中的函数?

2024-02-19

我的目标是能够调用 JQuery 插件内的函数。

正确的语法是什么?

例如,这不起作用:

<a href="#" id="click_me">Click Me</a>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
(function($) { 
    $.fn.foo = function(options) {
        do_stuff = function(){
            console.log("hello world!"); // works
            do_other_stuff = function(){
            alert("who are you?");
            }
        } // function
    } // function
})(jQuery);

$("body").foo();

$("#click_me").click(function(){
$.fn.foo.do_stuff.do_other_stuff(); // doesn't work
});

</script>

当您将函数分配给不带 var 关键字的变量时,它们要么覆盖该名称的局部变量,要么被添加到全局命名空间。 (所以你的 do_stuff 是一个全局函数,这不是你想要的)

做你想做的事情的一种方法是明确给出你想要函数驻留的位置。

(function($) { 
    $.fn.foo = function(options) {
        // whatever $().foo() should do
    };

    $.fn.foo.do_stuff = function() {
        console.log("hello world!");
    };

    $.fn.foo.do_stuff.do_other_stuff = function(){
        alert("who are you?");
    };
})(jQuery);

Edit:

这是可行的,因为 javascript 中的所有函数都是对象,这意味着您可以为任意属性赋值。

如果您想访问其他函数的变量,您可以将定义移到其他函数内部,例如:

$.fn.foo.do_stuff = function() {
    console.log("hello world!");
    $.fn.foo.do_stuff.do_other_stuff = function(){
        alert("who are you?");
    };
};

但这意味着该函数仅在您运行另一个函数时才被定义,并且每次运行该函数时它都会覆盖最后一个定义。

可能更理想的解决方案是让每个函数返回一个包含嵌套函数的对象,如下所示:

(function($) { 
    $.fn.foo = function(options) {
        // whatever $().foo() should do

        var do_stuff = function(do_stuff_args) {
            console.log("hello world!");
            // do stuff with options and do_stuff_args

            var do_other_stuff = function(other_args) {
                alert("who are you?");
                // here you have access to options, do_stuff_args, and other_args
            };

            return {
                do_other_stuff: do_other_stuff
            };
        };

        return {
            do_stuff: do_stuff
        }
    };
})(jQuery);

并使用调用它

foo().do_stuff(some_options).do_other_stuff(other_options);

or

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

如何调用嵌套在 JQuery 插件中的函数? 的相关文章

  • 对 JavaScript 中的 while 循环感到困惑

    我可能在这里有点厚重 但请回答我这个问题 考虑以下代码 a 1 while a lt 6 console log a a 如果我运行这个 我会在控制台中得到从 1 到 6 的值 然后是另一个 6 现在看看这个 a 1 while a lt
  • IE 9 的子元素不透明,我无法使用 captify 阻止它

    好的 我正在使用一段名为 Captify 的 javascript 它为您的图像添加了一个带有文本的小弹出窗口 适用于所有接受 IE9 的浏览器 IE9 会淡化弹出 div 中的所有内容 我已阅读其子元素问题 但无法修复它 由于在网上任何地
  • 如何使用 jquery 从 iframe 内部滚动?

    我正在使用一个 Shadowbox 它生成一个 iframe 以在页面上显示产品详细信息 由于详细信息页面可能相当长 因此客户端需要一个 更多 按钮来向下滚动页面 显然 iframe 右侧的滚动条还不够 这是我为了让 iframe 滚动而尝
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 如何滚动到 jQuery Mobile 中的页面元素?

    我有一个很长的 jQuery 移动页面 并且想在页面加载后滚动到该页面中间的元素 到目前为止 我已经尝试了一些事情 最成功的是 jQuery document bind mobileinit function var target if t
  • 向 FTP 服务器执行跨域 XMLHTTPREQUEST 的语法是什么?

    我有一个 webDav CORS 插件 可以使用它在 webDav 服务器上 POST PUT GET REMOVE ALLDOCS 文件 我现在想对 FTP 做同样的事情 但我正在努力获取xmlhttprequest 工作语法 我只是收到
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • 替换 Javascript 中的引号?

    对于我正在制作的网络应用程序 我将收到文本字符串 其中偶尔包含引号 因为我接下来要 document writing 字符串 所以需要将它们更改为撇号或转义 我该怎么做 因为当我尝试时它似乎不起作用 特别是我认为因为字符串的引号阻止了脚本的
  • 如何在流程图中间隔刻度线?

    我下面有一个流程图 您将看到标签被压缩 我想使刻度之间的宽度确保显示所有标签 标记如下 div div class graph info a href span span a a href class active span span a
  • jQuery 在提交的数据中附加一些奇怪的字符串

    重现该bug的代码 在html页面中放入以下代码并读取Fiddler中提交的数据 jQuery 1 4 2工作正常 问题发生在1 5 1和1 5 2
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 检查 href 中是否存在 jQuery 中的查询字符串

    我目前有一段 jQuery 用于附加带有一些位置信息的 URL jQuery a attr href function return this href location 123 abc 我的问题是大多数链接都有一个 其中使用上面的 就可以
  • 如何检查摘要周期是否稳定(又名“Angular 完成编译了吗?”)

    tl dr 最初的问题是 如何在每个摘要周期触发回调 但潜在的问题更有趣 因为这回答了两个问题 所以我继续修改了标题 Context 在解决了所有依赖项 nginclude API 调用等之后 我试图控制 Angular 何时完成 HTML
  • 可选链接在 create-react-app 中不起作用

    In a create react app项目 我正在使用 babel plugin proposal optional chaining在我的 babelrc中 但是 我有这个错误 Module parse failed Unexpect
  • 条件顺序仅在 init AngularJS 上执行

    如何在视图初始化时仅运行 orderBy 过滤器一次 我不希望我的列表在运行时被重新排序 li li 使用 orderBy 作为控制器中的过滤器 app controller DemoCtrl scope filter function s
  • 如何逐步绘制矢量路径? (拉斐尔.js)

    如何逐步动画化矢量路径 就像它被绘制一样 换句话说 慢慢地逐像素地显示路径 我在用着Rapha l js but如果您的答案不是特定于库的 例如可能有一些通用的编程模式可以完成此类事情 我对矢量动画相当陌生 欢迎 使用直线路径很容易做到 就
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg

随机推荐

  • jQuery 检测 cookie 已启用

    我有一个基于 jQuery 的网络应用程序 我的要求相当简单 我想使用 jQuery 来查明用户是否在其 Web 浏览器中启用或禁用了 cookie 我知道有一个可用的插件可用于创建 检索 删除 更新 cookie 但是 有没有办法 jQu
  • 字符串类型不可变的非技术好处

    我想知道从程序员的角度来看 字符串类型不可变的好处 技术优势 在编译器 语言方面 可以概括为 如果类型是不可变的 则更容易进行优化 读here https stackoverflow com questions 2916358 immuta
  • Crypto++ 输出数据长度

    我正在尝试使用 Crypto 库中的 AES 加密 CBC Mode
  • 将 void* 转换为 double

    我正在尝试使用pthread计算库n斐波那契数列其中n可以来自范围0 1000 当我尝试输入我的内容时 我遇到了一个奇怪的错误void to a double 在我的主要部分中 我调用了计算斐波那契函数 pthread create tid
  • Cookie 存在安全风险吗?

    假设我们有一个网站询问用户的姓名 然后 网站将该值存储在 cookie 中 并在下一页上通过 PHP 检索该值并以某种方式使用它 可能该页面将名称显示为文本 用户是否可以修改cookie数据来注入恶意代码 脚本检索 cookie 数据时是否
  • Chrome 浏览器中无法启用静默调试

    我无法在最新更新的 Chrome 浏览器中看到 Chrome 浏览器标志之一 启用静默调试 如果该标志已更改为其他标志 请告诉我 该标志在版本 79 之后被删除 您仍然可以使用命令选项激活它chrome exe silent debugge
  • 获取 mongodb 查询中项目的索引

    我有一个查询 如下所示 function getPage page return db messages aggregate group id subjectID skip page 20 limit 20 说我有一个subjectID我知
  • 使用 SASS 将列表作为单个参数传递给 mixin

    我喜欢用 SASS 制作 mixins 这有助于我实现良好的跨浏览器兼容性 我想制作一个如下所示的 mixin mixin box shadow value box shadow value webkit box shadow value
  • 如何使用 bean 的属性格式化字符串

    我想使用某种格式创建一个字符串 用 bean 的属性替换格式中的一些标记 是否有支持此功能的库 或者我是否必须创建自己的实现 让我用一个例子来演示一下 说我有一颗豆子Person public class Person private St
  • 使用 subprocess.Popen 的单元测试 Python 代码

    我有一个 Python 项目 在其中读取外部文件 处理它们 并将结果写入新文件 输入文件可以直接读取 也可以使用以下命令从 git 存储库中提取git show 要调用的函数git show并返回标准输出如下所示 def git show
  • 如何让 VSCode 识别当前包 Javascript 导入?

    当我导入像这样的 javascript 函数时 VSCode 智能感知很棒 import func from file vs code 会给我一个有用的对话框 其中包含来自 jsdoc 的参数 这是因为我使用的是相对文件路径 但是 如果我正
  • 如何在 Spring MVC 中将请求映射到 HTML 文件?

    基本配置文件看起来不直观 如果我创建简单的 hello world 示例 然后重命名home jsp to home html并编辑servlet context xml文件来自
  • Eclipse:JDK 9+ 不支持 clientBuilder.sslSocketFactory

    我在 Eclipseoxygen 4 7 0 java 1 8 上收到此错误 JDK 9 不支持 clientBuilder sslSocketFactory 与 Eclipse maven 相关 尝试更新 Maven Alt f5 模块
  • 如何将文本文件内容保存到Javascript变量?

    我正在尝试读取超过 150 000 行文本的文本文件 我希望能够读取文本文件并将其作为 processFileContent 的参数传递 我尝试了这种方法 但它不起作用 另外 对于如此大的数据 有没有更好的方法呢 function read
  • LDAP查询群组成员

    我正在尝试进行 LDAP 查询 以获取所有组 成员的列表 我不知道我该怎么做 我所有的尝试都没有成功 我的 AD 树 mydomain local Mybusiness Distribution Groups 这是我的组 我尝试过这样的事情
  • VSCode 远程 server.sh 在 wsl docker-desktop 中找不到节点

    I have VSCode v1 46 0 远程 wsl 扩展 v0 44 3 Windows 10 操作系统版本 19041 329 Docker 桌面 v2 3 0 3 我试图在 docker desktop wsl 中打开 VSCod
  • 访问使用 ElementTree 解析的 xml 文件中的嵌套子级

    我是 xml 解析新手 这个xml文件 http ratings food gov uk OpenDataFiles FHRS408en GB xml有以下树 FHRSEstablishment gt Header gt gt Establ
  • 在递归中使用 Prolog 列表

    所以我尝试用递归的方法来寻找两个人之间的路径 这是快速背景 我定义一些事实in X Y 这表明谁是相关的 即 in person1 project1 in person2 project1 等等 现在 如果任何两个人彼此在同一个项目中 或者
  • @ExceptionHandler 不适用于 Spring MVC 3.1 单元测试

    通过在正常 servlet 上下文之外实例化对象 我可以在 Spring MVC 控制器上完成几乎所有单元测试 但我希望能够运行一些测试 以确保我的对象序列化正常工作 正在生成标头等 为了在 servlet 上下文中运行测试 我创建了一个修
  • 如何调用嵌套在 JQuery 插件中的函数?

    我的目标是能够调用 JQuery 插件内的函数 正确的语法是什么 例如 这不起作用 a href Click Me a