【问题标题】:Help with calling an internal method of a jQuery plugin [closed]帮助调用 jQuery 插件的内部方法 [关闭]
【发布时间】:2009-10-21 13:19:58
【问题描述】:

我写了一个plugin to highlight terms used to find a page。来源是also available

我的问题是,如果您查看第一个链接的内联 JavaScript,我已经制作了一个自定义 textPlacement 函数来处理显示栏的插入(它看起来有点像 Stack Overflow 的)。

如您所见,我在插入的按钮上有一个事件处理程序。我已经编写了删除栏的代码,但我也想删除突出显示的术语。该插件有一个方法可以做到这一点,称为toggleTermHighlighting()

如何从示例页面上的匿名函数内部调用该方法?我需要让它this.toggleTermHighlighting = function() {}。我尝试将 this 的一个实例传递给第一个参数,但无法使其工作。

抱歉,我在 JavaScript 中的作用域似乎总是很困难。

有谁知道我可以做些什么才能从示例页面的匿名函数内部访问该方法?

【问题讨论】:

    标签: javascript jquery jquery-plugins scope


    【解决方案1】:

    我认为如果你重新构造插件内部定义函数的方式,它会变得相当容易。

    将第 128 行更改为:

    var toggleTermHighlighting = function() {
    

    到:

    this.toggleTermHighlighting = function() {
    

    然后你可以做这样的事情来从一个完全不同的范围访问函数:

    var myPlug = new $.fn.searchTermsHighlight();
    myPlug.toggleTermHighlighting();
    

    这将是您问题的答案,但我认为不同的方法可能更合适。如果您查看大量 jQuery UI 代码,您可以将一个字符串传递给插件,它会为您执行一个函数。所以你实际上可以这样做:

    $('body').searchTermsHighlight('toggle');
    

    然后只需在函数顶部或 init() 类型函数中检查它

    if (options === 'toggle'){ toggleTermHighlighting(); return this; }
    

    【讨论】:

      【解决方案2】:

      您将不得不将“toggleTermHighlighting”单独设为一个公开的 jQuery 函数,或者将其功能公开为您现有方法的一个选项。好吧,如果你想做一些奇怪的事情,你可以将函数(以及你喜欢的任何其他东西)填充到受影响对象上的数据元素中(参见 jQuery“数据”函数)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-22
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多