2

falseを返すか、foreachループを解除したい。しかし、それは機能していません。これは私が試したコードです。

 function validate()
    {
        var validate="false";
        var atLeastOneIsChecked =  $("input[name='city[]']").is(":checked");
        if(atLeastOneIsChecked==true){

            $("input:checkbox[name='city[]']:checked").each(function(j){
                var city=$(this);

                $('select[name="category[]"]').each(function(i){

                    if(i==j){
                         if($(this).val()=="0"){
                         alert("Please select hotel category");
                         city.click();
                           //validate="false";
                            return false;
                       }
                        else
                        {
                            validate="true";
                        }

                    }
    // return false;
                }); 
                alert(j);
               // return false;
            });
            //return false;
        }
        else
        {
            alert('Please select atleast one city.');
            validate="false";
        }
        if(validate=="true"){
            return true;
        }
        else
        {
            return false;
        }
    }

「ホテルカテゴリを選択してください」の後、関数はfalseを返す必要があります。ただし、フォームはアラートの後に投稿されます。私は何が悪いのかわかりません。

4

3 に答える 3

0

みんな、ありがとう。コードを変更しました

function validate()
    {
        var validate="false";
        var atLeastOneIsChecked =  $("input[name='city[]']").is(":checked");
        if(atLeastOneIsChecked==true){

            $("input:checkbox[name='city[]']:checked").each(function(j){
                var city=$(this);
                $('select[name="category[]"]').each(function(i){
                    if(i==j){
                        if($(this).val()=="0"){
                            alert("Please select hotel category");
                            city.click();
                            city.attr('checked', true);
                            validate="false";
                            return false;
                        }
                        else
                        {
                            validate="true";
                        }
                    }
                }); 
                if(validate=="false"){
                    return false;
                }
            });
        }
        else
        {
            alert('Please select atleast one city.');
            validate="false";
        }
        if(validate=="true"){
            return true;
        }
        else
        {
            return false;
        }
    }

今それは働いています。

于 2012-10-24T11:37:16.737 に答える
0

私が間違っていなければ、あなたが犯している間違いは、あなたがこれを考えているということです:

if($(this).val()=="0"){
    alert("Please select hotel category");
    city.click();        
    //validate="false";
    return false;
}

クリックハンドラーがフォームを投稿できないようにします。falseを返す部分は、フォームを送信するイベントハンドラーの前に呼び出されるイベントハンドラーで発生する必要があります。

于 2012-10-24T11:01:12.307 に答える
0

次のように、ハンドラーをフォームタグに配置します。

<form onsubmit="return validate();" method="POST" action="post.php">

  ..

</form>

次に、送信時に呼び出され、関数でfalseを返すと、フォームの送信が妨げられます。

于 2012-10-24T11:04:45.997 に答える