2017-05-03 21 views
0

私はこのプラグインの作成jQueryプラグイン

を練習しています:

(function ($) { 
    'use strict'; 
    $.fn.characterCounter = function() { 
     return this.each(function (index, item) { 
      $(item).keyup(function updateCharCounter() { 
       var $me = $(this), 
        maxLength = parseInt($me.attr('maxlength'), 10), 
        charCount = $me.val().length, 
        $counter = $me.siblings('.limit'); 

       $counter.text('limit: ' + maxLength + ' characters. remaining: ' + (maxLength - charCount)); 
      }); 
     }); 
    }; 

})(jQuery); 

と私のhtmlコードを:

<div class="form-group"> 
    <textarea id="short-message" maxlength="100" cols="8"></textarea> 
    <p class="limit">limit: 100 characters</p> 
</div> 

<div class="form-group"> 
    <textarea id="short-shory" maxlength="150" cols="8"></textarea> 
    <p class="limit">limit: 150 characters</p> 
</div> 

<div class="form-group"> 
    <input id="nickname" maxlength="50" size="32"/> 
    <p class="limit">limit: 50 characters</p> 
</div> 


<script src="~/Scripts/jquery-1.10.2.js"></script> 
<script src="~/Scripts/showCharacterCharlimit.js"></script> 

<script> 
    $(document) 
     .ready(function() { 
      'use strict'; 
      $('textarea').characterCounter(); 
     }); 

</script> 

が、私は、このエラーを取得:

TypeError: $(...).characterCounter is not a function

私はなぜ、誰も私を助けることができるか分からないのですか?

+1

手掛かりは、私はそれはあなたのフィドル@Georgeこの[JSFiddle](https://jsfiddle.net/jsupv7qy/1/) – George

+0

で働いているjqueryの3.2.1を使用しますが、OPが持ってい古くなったjquery 1.10.2。あなたのフィドルで1.19または2.2に変更すると、エラーが発生します。これは、ロードの順序によって発生することが判明しています。 https://jsfiddle.net/jsupv7qy/2/ –

+0

ドキュメントの準備がスクリプトより先に実行されているようです。 OPのコードは正しい順序であるように見えます。実際のコードもこの順序であることを確認できますか? –

答えて

0

(function ($) { 
 
    'use strict'; 
 
    $.fn.characterCounter = function() { 
 
     return this.each(function (index, item) { 
 
      $(item).keyup(function updateCharCounter() { 
 
       var $me = $(this), 
 
        maxLength = parseInt($me.attr('maxlength'), 10), 
 
        charCount = $me.val().length, 
 
        $counter = $me.siblings('.limit'); 
 

 
       $counter.text('limit: ' + maxLength + ' characters. remaining: ' + (maxLength - charCount)); 
 
      }); 
 
     }); 
 
    }; 
 

 
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="form-group"> 
 
    <textarea id="short-message" class="wordcount" maxlength="100" cols="8"></textarea> 
 
    <p class="limit">limit: 100 characters</p> 
 
</div> 
 

 
<div class="form-group"> 
 
    <textarea id="short-shory" class="wordcount" maxlength="150" cols="8"></textarea> 
 
    <p class="limit">limit: 150 characters</p> 
 
</div> 
 

 
<div class="form-group"> 
 
    <input id="nickname" class="wordcount" maxlength="50" size="32"/> 
 
    <p class="limit">limit: 50 characters</p> 
 
</div> 
 
<script> 
 
    $(document) 
 
     .ready(function() { 
 
      'use strict'; 
 
      $('.wordcount').characterCounter(); 
 
     }); 
 

 
</script>

あなたはこのためのjQueryを追加する必要があるので、あなたはjqueryの依存関係を持って、ご確認ください。 そして私は共通クラスを使用して、すべてのタイプの入力フィールドで機能するようにしました。

おかげ

+0

なぜ私は役に立たないのですか? –

+0

これはOPのコードとどのように違うのですか? –

+1

* .characterCounterが定義されていないという事実は、$(document).ready *が実行中であることを確認しているので、jqueryは既に利用可能です。 –

関連する問題