私はかなりの数ヶ月間JS(主にjQuery)を書いてきましたが、今日は最初の抽象化をjQueryメソッドとして作成することにしました。私はすでに作業コードを持っていますが、私は正しい方法でやっていないと感じているので、私はここにいくつかの啓発のために来ます。宣言時にjQueryメソッドを呼び出し、次にonEvent
注:私が既に知っているように、そのトリックを行う何かがすでにあると返答しないでください。この問題に対する私の関心はむしろ教育的です。私のコードを実行するためのもの(とし)は何
:テキストフィールドの文字と、ユーザが終わりに近づいているとき、カウンターの色を変更
リミット。
そして、ここで私が持っているものです。
HTMLで$(function(){
$('#bio textarea').keyup(function(){
$(this).char_length_validation({
maxlength: 500,
warning: 50,
validationSelector: '#bio .note'
})
})
$('#bio textarea').trigger('keyup');
})
jQuery.fn.char_length_validation = function(opts){
chars_left = opts.maxlength - this.val().length;
if(chars_left >= 0){
$(opts.validationSelector + ' .value').text(chars_left);
if(chars_left < opts.warning){
$(opts.validationSelector).addClass('invalid');
}
else{
$(opts.validationSelector).removeClass('invalid');
}
}
else{
this.value = this.value.substring(0, opts.maxlength);
}
}
:
<div id="bio">
<textarea>Some text</textarea>
<p class="note>
<span class="value">XX</span>
<span> characters left</span>
</p>
</div>
特に私は、それぞれからkeyupに各イベントを結合の代わりに、一度結合し、後でメソッドを呼び出して、本当に不快に感じます。
また、(したがってタイトルも)最初に(ページがレンダリングされるとき)メソッドを呼び出す必要があり、ユーザーが文字を入力するたびに呼び出す必要があります。あなたの時間:)
'this'はすでにjQueryオブジェクトです。 –
私は知っている:)。ちょうどそれについて読んでいた。 – Heikki
とてもエレガントです。それは有り難いです! – cesarsalazar