2

私は次のコードを持っています

<input type="text" id="max_marks" name="max_marks" value="100">            
<input type="text" id="marks" name="marks" value="75" >
        <script type="text/javascript">
            $(document).ready(function(){
                $('#marks,#max_marks').change(function(){
                    var mm=$('#max_marks').val();
                    var m=$('#marks').val();

                    if(parseInt(mm,10) > parseInt(m,10))
                    {
                     alert("Maximum marks greater than obtained marks");   
                    }                        
                }).change(); 
            });

        </script>

最大マークが取得したマークよりも少ない場合にアラートが発生します。どこで間違いをしているのですか?

4

2 に答える 2

1

jQueryやJavascriptなどのクライアントサイドスクリプト言語のフローを予測できない場合があります。

 <input type="text" id="max_marks" name="max_marks" value="100"><span></span>
 <input type="text" id="marks" name="marks" value="50" ><span></span>
        <script type="text/javascript">
            $(document).ready(function(){

                function isNumberInt10(n) {
                         return !isNaN(parseInt(n,10)) && isFinite(n);
                        }
                function isValidMarks(m,n){

              if(parseInt(m) <= parseInt(n))
                    {   
                             return true;
                    }
                }        
                $('#max_marks').change(function(){

                 var mm=$('#max_marks').val();
                    if (!isNumberInt10(mm)) {
                        $('#max_marks').next().text('Enter valid marks');
                        $('#max_marks').attr('value','');
                        $('#max_marks').focus();
                        }
                   else
                    {
                        $('#max_marks').next().text('');
                        $('#max_marks').attr('value','');
                        $('#max_marks').focus();
                    }   
                    }).change(1000); 

           $('#marks').change(function(){        

                    var mm=$('#max_marks').val();
                    var m=$('#marks').val();

                  if (!isNumberInt10(m)) {
                        $('#marks').next().text('Enter valid marks');
                        $('#marks').attr('value','');
                        $('#marks').focus();
                        }
                   else
                    {    
                        $('#marks').next().text('');
                    }
                   if(isValidMarks(mm,m))
                    {   
                        $('#marks').next().text('Enter Valid obtained marks');
                        $('#marks').attr('value','');
                        $('#marks').focus();
                    }
                    else
                    {
                        $('#marks').next().text('');
                    }
                   }).change(1000);
            });

        </script>
于 2012-08-25T13:47:48.307 に答える
0

あなたが書いたコードは、間違った数値文字列に対して脆弱です。私はそれをこのように修正することを提案します:

function isNumberInt10(n) {
  return !isNaN(parseInt(n,10)) && isFinite(n);
}

$(document).ready(function(){
    $('#marks,#max_marks').change(function(){
        var mm, m;

        mm=$('#max_marks').val();
        if (!isNumberInt10(mm)) {
           alert("Max marks needs to be a number");
           return;
        }
        m=$('#marks').val();
        if (!isNumberInt10(m)) {
           alert("Marks needs to be a number");
           return;
        }

        if(parseInt(mm,10) > parseInt(m,10)) {
            alert("Maximum marks greater than obtained marks");   
        }                        
    }).change(); 
});
于 2012-08-24T15:50:26.393 に答える