0

jQuery Mobileを使用してテキストエリアでmax-lengthを使用しようとしていますが、奇妙な問題が発生しました。問題は、javascriptでfalseが返されるかどうかに関係なく、textareaによって15から60までのテキストを入力できなくなることです。文字が早すぎます。

maxLengthプロパティは1150に設定されており、1090〜1115文字を入力できます。これが私がテストした唯一の方法であるため、コピーアンドペーストを使用する機能であるかどうかはわかりませんが、奇妙に思えます。

コードは次のとおりです。

$(document).delegate('#main','pageinit',function() {
    $('#title,#description').keypress,function(e){

        var cur=$(this).val().length,
        max=$(this).prop('maxLength'), rem=max-cur,
        ch=$(this).parents('.ui-bar').find('.char-rem'),
        red=$(this).parents('.ui-bar').find('.char-rem.red'),           
        green=$(this).parents('.ui-bar').find('.char-rem.green');

        ch.children('span').html(rem);

        if(rem <= 10)
        {
            green.removeClass('green')
            ch.addClass('red');
        } else {    
            red.removeClass('red')
            ch.addClass('green')
        }
        if(rem == 0)
        {
            if(e.which!= 8)
            {
                return false;
            }
        }

    })
})

毎回何が起こるかというと、残りの文字数が少なくなりますが、ゼロより多くなり、入力できなくなります。以下を削除しても同じことが起こります。

if(rem == 0)
{
    if(e.which!= 8)
    {
        return false;
    }
}

keydownとkeyup、およびpageinitの内側または外側でこれを試し、その他のさまざまな調整を行い、textarea textLengthプロパティを使用してtextareaの文字数を確認しましたが、毎回結果は同じです。

現在、Chromiumを使用してこれをテストしており、他の場所ではテストしていませんが、足りないものがあるかどうかを確認したいと思います。

手がかりはありますか?

4

2 に答える 2

0

改行についての私の以前のメモは答えではありませんでした。答えは、関数が呼び出されるたびに、maxLengthプロパティを新しく読み取っていたということでした。何らかの理由で、maxLengthプロパティを読み取るときに、カウントが混乱していました。

maxLength値の変数を、プロパティを読み取らせる代わりに数値(1150)に切り替えると、完全に機能しました。

本当の答えで編集:

実際、本当の答えは、私が閉じていないhtmlタグを持っていたので、誰がそれが何をしていたかを知っているということでした。タグを修正したところ、すべて順調でした

于 2012-05-16T13:45:48.147 に答える
0

別の解決策は次のとおりです。このmaxlengthを使用すると、textareasでも機能します。

/*****************************/
// SET MAX NUMBER OF CHARACTERS FOR ALL TEXTAREAS TROUGH ATTRIBUTE maxlength="*"
jQuery('textarea[maxlength]').keyup(function(){  
  //get the limit from maxlength attribute  
  var limit = parseInt($(this).attr('maxlength'));  
  //get the current text inside the textarea  
  var text = $(this).val();  
  //count the number of characters in the text  
  var chars = text.length;  
  //Create counter, once
  if (!jQuery(this).prev("span").length) {
    jQuery(this).before('(Tecken <span class="charsleft"></span> av max ' + limit + ')');
  }
  //Update counter
  jQuery(this).prev('.charsleft').html(chars); 
  //check if there are more characters then allowed  
  if(chars > limit){  
  //and if there are use substr to get the text before the limit  
  var new_text = text.substr(0, limit);  
  //and change the current text with the new text  
  jQuery(this).val(new_text);  
  }  
});  
/*****************************/
于 2013-04-14T10:20:15.527 に答える