2016-07-06 60 views
3

我不知道我的代碼出了什麼問題。我一直在爲maxLength得到一個NaN變量。我是否正確地寫這個功能?將變量傳遞給javascript中的函數

Helper功能,我想呼籲:

(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); 
} 

調用的功能傳遞的最大長度可變

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

回答

4

this將參考你的0中的window因爲你不用範圍調用它。您可以修復使用call()

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

還要注意的是邏輯用來生成元素的id放置在一點點關閉消息。您可以通過使用data屬性顯式設置元素ID來改善它。

在這種情況下,您的重載方法也是多餘的,因爲如果沒有提供默認值,您可以利用JavaScript的「虛假」邏輯來提供默認值。這意味着,你可以轉換到一個你的兩個countRemainingCharacters()功能:

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

Working example

所有這一切將在該點剩下的就是創建一個關鍵事件處理程序來計算剩餘字符作爲用戶類型。

+0

非常感謝你Rory!我絕對不知道有關虛假邏輯。 – Lisa