2016-07-06 19 views
3

私のコードに何が問題なのかよく分かりません。 maxLengthのNaN変数を取得し続けます。この機能を正しく書いていますか?javascript内の関数に変数を渡す

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

機能は、上記のヘルパー関数を呼び出す:

ヘルパー関数は、私が呼び出ししようとしている変数のmaxLengthで通過を機能するように呼び出す

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を明示的に設定することで、改善することができます。

オーバーロードされたメソッドは、JavaScriptsの「falsy」ロジックを利用してデフォルト値を提供することができます。これは、1つの中で、あなたの2つのcountRemainingCharacters()の機能を変換することができますことを意味します

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

Working example

その時点で残されるであろうとすべてのユーザーの種類として残りの文字を計算するために、キーイベントハンドラを作成することです。

+0

ありがとうございました!私は間違いなく偽の論理を知らなかった。 – Lisa

関連する問題