javascript - 在 jquery 插件的事件函数中获取变量

标签 javascript jquery dom plugins jquery-plugins

我为我的项目使用 jQuery 开发了一个插件。在这个插件中,我使用一个 slider 插件,它在我的插件初始化时初始化。我将其分配给插件中的公共(public)变量。并且有一个绑定(bind)到元素的事件,当用户输入一定数量时会触发该事件。基本上, slider 根据输入元素中输入的值而变化。但问题是,当 keyup 事件被触发时,我分配给 slider 的变量是未定义的。我该如何解决这个问题。

inti方法

var init = function() {
        plugin.settings = $.extend({}, defaults, options);

        set_default_values();

        this.slider = $(plugin.settings.sliderElements).slider();

        $(plugin.settings.sliderElements).on("slide", plugin.settings.onPluginSlide);
        $(plugin.settings.numOfMonthsKey).on("keyup", function(e){
            plugin.settings.onMonthKeyEnter(e,this.slider);
        });
}

事件

var defaults = {
        sliderElements: '#numOfMonths', //comma seperated jquery selectors
        perMonthAmountElement: '.perMonth',
        numOfMonthsElements: '.numOfMon', //comma seperated jquery selectors
        sumOfRecItemElement: '.sumOfRecItems',
        monthlyCostElement: '.monthlyCost',
        oneTimeFeeElement: '.oneTimeFee',
        nextInvoiceAmountElement: '.nextInvoiceAmount',
        numOfMonthsKey: '.numOfMonthsKey',
        oneTimeFee : 0,
        sumOfRecurringItems : 0,
        interestRate: 0.2,
        currency : 'kr', //This is just to display 
        onPluginSlide: function(sliderEvent){
            $(plugin.settings.numOfMonthsElements).text(sliderEvent.value);
            $(plugin.settings.perMonthAmountElement).text(calc_compound_interest_rate(plugin.settings.oneTimeFee,plugin.settings.interestRate,sliderEvent.value));
            $(plugin.settings.monthlyCostElement).text(plugin.settings.sumOfRecurringItems + amount_per_month(sliderEvent.value));
        },
        onMonthKeyEnter: function(keyEvent,slider){
            slider.slider('setValue', keyEvent.getCurrentTarget.value ,true)
        }
    }

如何在插件初始化后访问 slider 对象。我想到使用窗口变量 bt 我不知道它是好是坏。

如有任何帮助,我们将不胜感激。

最佳答案

“this”关键字的上下文在事件内部发生变化。在 JavaScript 中使用“this”关键字可能有点令人困惑,我建议阅读以下答案 - How does the "this" keyword work? .

我会避免使用窗口(全局)变量,它们很容易与您将来可能使用/使用的其他 JavaScript 库发生冲突。

您可以尝试在 init 函数中创建一个 self 变量(或您认为合适的任何其他名称),并用它来代替“this”关键字。这将避免“this”关键字根据上下文具有不同值的问题,您的 self 变量将始终相同。

var init = function() {
    var self = this;
    self.slider = $(plugin.settings.sliderElements).slider();

    $(plugin.settings.numOfMonthsKey).on("keyup", function(e){
        plugin.settings.onMonthKeyEnter(e,self.slider);
    });
};

关于javascript - 在 jquery 插件的事件函数中获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29562917/

相关文章:

javascript - React 状态数组在渲染中给出 null 错误

javascript - Firefox OS 特权应用 : Permission denied to access property 'document' of new window object created

javascript - 如何从表格单元格中获取数据?

jquery - 使用 pjax 时销毁/隐藏 twitter Bootstrap 工具提示

javascript - Html-Select-Tag-如何在不使用 eval() 的情况下将字符串值转换为 javascript?

javascript - 如何在客户端的 Meteor 中捕获/处理 net::ERR_CONNECTION_REFUSED

javascript - DirectLineJS 接收机器人回复的副本

jQueryMobile : how to work with slider events?

javascript - Jquery:上下文菜单重置

php - 从 javascript 添加标签