2012-04-05 12 views
2

私はPHP Codeigniterフレームワークを初めて使用しています。私はリンクを使用しているページを設計しています。リンクをクリックするとjquery関数が呼び出され、jqueryによってフォームが送信されます。私はサーバ側のバリデーションのためにcodeigniterフォームのバリデーションメソッドを使用していましたが、私はクライアント側のバリデーションを無効にしました。PHP CodeigniterフォームはJQueryを使用して送信します

問題は、このプロセスでフォームがjqueryを介して送信されるときに、コード署名フォームの検証メソッドが機能していないことです。

しかし、フォームを送信するために送信ボタンを使用している場合、codeigniterフォームの検証メソッドは完全に機能します。

jqueryを使用してフォームを送信し、codeigniterフォームの検証方法を使用する必要がある場合は、どうすればよいか教えてください。

見つけてください以下のコード:

ログインフォーム:

<?php echo validation_errors(); ?> 
<form name="login-form" id="login-form" method="post" action="<?php echo base_url();?>index.php/login/login_form" > 
    <H2>Login</H2> 
    <div id="login-box-name"> 
     Email: 
    </div> 
    <div id="login-box-field"> 
     <input name="user-name" id="user-name" class="form-login" title="Please Enter Correct User Name" value="" size="30" maxlength="2048" /> 
    </div> 
    <div id="login-box-name"> 
     Password: 
    </div> 
    <div id="login-box-field"> 
     <input name="password" id="password" type="password" class="form-login" title="Please Enter Correct Password" value="" size="30" maxlength="2048" /> 
    </div> 
    <br /> 
    <span class="login-box-options"> 
     <input type="checkbox" name="1" value="1" title="Want this computer to remember you!!"> Remember Me <a href="#" id="login-div-change">Forgot password?</a> 
    </span> 
    <br /> 
    <br /> 
    <a href="" id="login-submit"> 
     <img src="<?php echo base_url();?>assets/images/login-btn.png" width="110" height="40" style="margin-left:90px;" /> 
    </a> 
    <input type="submit" name="submit" id="submit" value="Submit" /> 
</form> 

jqueryの機能 "リンク" をクリックの上にフォームを送信するには:

 

    $("#login-submit").click(function() 
    { 
    $('#login-form').submit(); 
    return false; 
    }); 

コントローラ機能:

 

    public function login_form() 
    { 

     $this->load->helper(array('form', 'url')); 
     $this->load->library('form_validation'); 
     $data['title'] = 'Log In'; 

     $data['errorMessage'] = ''; 
     $this->form_validation->set_rules('user-name', 'Email', 'required'); 
     $this->form_validation->set_rules('password', 'Password', 'required'); 

     if ($this->form_validation->run() == FALSE) 
     { 
     $this->load->view('templates/header', $data); 
     $this->load->view('login', $data); 
     $this->load->view('templates/footer'); 
     } 

     else 
     { 
     $this->load->view('templates/header', $data); 
     $this->load->view('templates/menu'); 
     $this->load->view('index', $data); 
     $this->load->view('templates/footer'); 
     } 

    } 

ここで、フォームの[送信]ボタンをクリックすると、ユーザー名とパスワードのフィールドにコード署名の検証が行われます。しかし、id = "login-submit"のリンクをクリックすると、jquery関数が呼び出され、フォームが送信されます。しかし、今回はユーザー名とパスワードのフィールドでcodeigniterの検証は機能しません。

私はリンクを介してフォームを提出する必要があり、コード署名検証機能がこのために機能するはずです。事前に

おかげで.....

+1

...あなたはjQueryのためのコントローラで同じ機能を呼び出していると、デフォルトのアクションを提出しますか? – snaderss

+1

DUDE!私は完全にjqueryとCIを愛し、一日中それを使用し、私は大いに役立つ何かを教えてあげよう! [this jQuery Plugin](http://jquery.malsup.com/form/)をチェックすると、100倍も簡単になります。また、PHP側から何かを見る必要があるときはいつでも 'print_r'を使うことを忘れないでください。かなり追加する – SpYk3HH

+1

私はあなたに[このページをブックマークする](http:// codeigniter。com/user_guide /)を使用して頻繁に使用すると、左上の 'Table of Contents 'タブをクリックして開くと、(chromeは私が使用しているものを使用します)ctrl + fを使用してあなたが探しているものを入力して、すぐに簡単にリンクを見つけてください。 – SpYk3HH

答えて

2

使用.preventDefault()だけではなく、アンカーをクリックしてイベントにfalseを返すの。

これは以前私に起こっていましたが、クリックイベント内で.submit()を使用し、falseを返してアンカーのデフォルト動作を停止させるような矛盾があるようです。

+0

おかげでrgin ...私は今それを見つけた... – Gourav

+0

それは動作しましたか?フォローアップの質問 - とにかく、送信ボタンがすでにあるときにフォームを送信するためにリンクを使用しているのはなぜですか? '.submit()'はコールバック関数を持っています。 – rgin

+0

私は、ボタンの画像を使用しているので、私はリンクを使用してのみ可能と思う私は、サイトに均一なデザインを持っているリンクを使用しています。はい、私は今すぐ(コールバック関数)を得ました....それは間違いなく私に役立つでしょう...感謝rgin – Gourav

2

上記のコードは正常に動作しています。実際、私は自分のコードでばかげたミスを犯しました。 次のコードをjQuery用に使用しましたが、現在は動作しています。

 

    $("#login-submit").click(function(e) { 
     e.preventDefault(); 
     $('#login-form').submit(); 
    }); 

おかげでいくつかのコードを助けるかもしれない

+0

この問題についてもう一度お手伝いできますか?ソリューションに問題があります。My $( "#form")。submit()は動作しません。 –

関連する問題