タイトルが正しいかどうかはわかりません。この問題は言葉ではうまく言い表せません!
入力できる文字数を制限しようとしている HTML に次のテキスト フィールドがあります。
<div class="limited limit-200">
<div class="label">
<label for="_je_industries_desc">Industry Description</label>
</div>
<div class="input">
<textarea class="large-text" name="industries_desc" id="industries_desc" cols="60" rows="3"></textarea>
<p id="industries_desc_description" class="description">Put a short description of this industry.</p>
</div>
</div>
<div class="limited limit-100">
<div class="label">
<label for="_je_seo_description">Meta Description</label>
</div>
<div class="input">
<textarea class="large-text" name="seo_description" id="seo_description" cols="60" rows="3"></textarea>
<p id="seo_description_description" class="description">Put a short description of the content of this page.</p>
</div>
</div>
これまでの私のjQueryは次のとおりです。limit-200
たとえば、HTML のクラス名から文字制限を取得します。次に、入力した残りの文字数を計算し、テキストエリアの下に残りの文字を出力します。
jQuery(document).ready(function(){
jQuery('.limited').each(function() {
// Get the class names of any element that has the class .limited
var className = jQuery(this).attr('class');
// Use regex to capture the character limit class (limit-#)
var limit = className.match(/[?:limit-](\d+)/);
// Set the limit var to the match from the regex
var limit = limit[1];
// Calculate the number of characters that are still available (limit - characters in field)
var chars_left = limit - jQuery('textarea', this).val().length;
//alert(chars_left);
// Attach an event handler to each textarea with the class .limited
jQuery('textarea', this).on('keyup', function() {
var maxchar = limit;
var cnt = jQuery(this).val().length;
var remainingchar = maxchar - cnt;
if(remainingchar < 0){
jQuery('#limit-counter span').html('<strong>0</strong>');
jQuery(this).val(jQuery(this).val().slice(0, limit));
} else {
jQuery('#limit-counter span').html('<strong>' + remainingchar + '</strong>');
}
});
// Display number of characters left
jQuery('textarea', this).after('<span id="limit-counter">Remaining characters: <span><strong>' + chars_left + '</strong></span></span>');
});
});
これは単一のテキストエリアにはうまく機能しますが、複数のテキストエリアがあり、いずれかのテキストエリアに入力すると、他のテキストエリアは、入力しているものと同じ値でカウンターを更新します。
誰かが私が間違っていることを見つけるのを手伝ってくれませんか? うまくいけば、どこかで単純なものが欠けているだけです!
ありがとう!