在javascript中将变量传递给函数

时间:2016-07-06 15:09:11

标签: javascript jquery

我不确定我的代码有什么问题。我一直为maxLength获取一个NaN变量。我正确地写这个函数吗?

我试图打电话的助手功能:

(function($) {
    $.fn.countRemainingCharactersHelper = function(maxLength) {
        id = this.attr('id');
        var textLength = this.val().length;
        var textRemaining = maxLength - textLength;

        if (textLength >= maxLength) {
            textRemaining = 0;
        }

        var messageId = id.slice(0, (id.indexOf('someTxtBox'))) + 'someTxtBox';
        $('#' + messageId).html(textRemaining + ' characters remaining.');
    };
})(jQuery);

调用上面的辅助函数的函数:

function countRemainingCharacters() {
    $(this).countRemainingCharactersHelper(1000);
}

function countRemainingCharacters(maxLength) {
    $(this).countRemainingCharactersHelper(maxLength);
}

调用函数传递maxLength变量

$('#samplesomeTxtBox').click(function() {
    countRemainingCharacters(4000);
});

1 个答案:

答案 0 :(得分:4)

this会引用window函数中的countRemainingCharacters(),因为您没有使用范围调用它。您可以使用call()修复此问题:

$('#samplesomeTxtBox').click(function() {
    countRemainingCharacters.call(this, 4000);
})

另请注意,用于生成要放置消息的元素的id的逻辑稍微偏离。您可以使用data属性显式设置元素ID来改进它。

在这种情况下,您的重载方法也是多余的,因为您可以利用JavaScripts' falsy'如果没有提供默认值,则提供默认值。这意味着您可以将两个countRemainingCharacters()函数转换为一个:

function countRemainingCharacters(maxLength) {
    $(this).countRemainingCharactersHelper(maxLength || 1000);
}

Working example

此时剩下的就是创建一个键事件处理程序来计算用户输入的剩余字符。