将变量传递到 javascript 中的函数中

Passing a variable into a function in javascript

本文关键字:函数 javascript 变量      更新时间:2023-09-26

我不确定我的代码出了什么问题。 我一直得到最大长度的 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);
});

this将引用countRemainingCharacters()函数中的window,因为您不会使用作用域调用它。您可以使用call()来解决此问题:

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

另请注意,用于生成放置消息的元素id的逻辑有点偏差。可以通过使用 data 属性显式设置元素 ID 来改进它。

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

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

工作示例

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