私はhereと書かれた問題を持っていますが、私は1つ1つの問題に取り組む必要があることを認識しました。私はContact Usフォームで少し簡単な例を使用します。私は私がうまく形成ご連絡作業を取得URLを使用してコントローラを呼び出す場合動的に構築されたhtml要素でCodeIgnitersフォーム検証を使用するには?
<div class="container-fluid">
<div class="row">
<div class="col-sm-12">
<?php echo form_open('contact'); ?>
<div class="form-group">
<label for="name">Full name</label></br>
<input type="text" class="form-control" name="name" placeholder="Enter your full name" value="<?php echo set_value('name') ?>" ></br>
<?php echo form_error('name'); ?>
</div>
<div class="form-group">
<label for="email">Email</label></br>
<input type="text" class="form-control" name="email" placeholder="Enter your email" value="<?php echo set_value('email') ?>"></br>
<?php echo form_error('email'); ?>
</div>
<div class="form-group">
<label for="subject">Subject</label></br>
<input type="text" class="form-control" name="subject" placeholder="subject" value="<?php echo set_value('subject') ?>"></br>
<?php echo form_error('subject'); ?>
</div>
<div class="form-group">
<label for="msg">Message</label></br>
<textarea rows="4" class="form-control" type="text" name="msg" placeholder="Enter your message"><?php echo set_value('msg') ?></textarea></br>
<?php echo form_error('msg'); ?>
</div>
<input type="submit" class="btn btn-default" name="submit" value="send" />
</form>
</div>
</div>
</div>
:
class Contact extends CI_Controller {
public function __construct()
{
[...]
}
public function index()
{
$this->form_validation->set_rules('name', 'Full name', 'trim|required');
$this->form_validation->set_rules('email', 'Your email', 'trim|required|valid_email');
$this->form_validation->set_rules('subject', 'Subject', 'trim|required');
$this->form_validation->set_rules('msg', 'Message', 'trim|required');
$this->form_validation->set_error_delimiters('<div class="text-danger">', '</div>');
if($this->form_validation->run() == FALSE)
{
$this->load->view('contact', $data);
}
else
{
// Configure email library
[...]
$this->email->send();
$this->load->view('contact_success');
}
}
とビュー:
私は、コントローラを持っています。しかし私は、Contact Usのような小さなことが新しいページにロードされなければならないと迷惑をかける。だから私は私のメインページビューでこのjqueryを持っています:
[..]
<a href="#" id="contact-link">register</a>
[..]
<script>
$(document).ready(function(){
$('#contact-link').on('click',function(){
$.get(baseurl + 'index.php/contact', function(response){
$('#popup-div').html(response);
});
});
});
</script>
これで私のメインビューに連絡先のコントローラが埋め込まれました。しかし、私はフォームを表示し、フォーム検証が実行されると実際に電子メールを送信します。しかし、フォームの検証が実行されない場合、新しいページが読み込まれ、検証エラーが発生した同じフォームが表示されます。ポップアップディビジョンに検証エラーが表示されます。
これは多くのウェブサイトで行われていることがわかりましたが、CIでどのように行うかについて頭を悩ますことはできません。提出するたびに連絡先担当者に連絡する必要がありますか?問題は、$ .getが一度だけ呼び出されるため、コールバックが応答を1回しか処理しないということです。私は$('#contact-link').on('click',function(){
部分を削除しようとしましたが、私は助けません。私は関数の中に$ .getを入れて再帰的にすることについては言いますが、フォームの検証を乱す恐れがあります。
これは問題を処理するための素晴らしい方法のようです。私は検証プラグインを調べようとしましたが、正確にはどのように動作するのか分かりませんでした。私の主張は、CIバリデーションと一緒に実装することです。私はそれを得た場合でも、私はまだCIコントローラのルールを設定することができますか?しかし、CI form_errorとset_valueが確実に動作するようにする方法はありますか? jQueryプラグインがうまくいかない、またはすべての情報をエコーしてJSロジックを書き込む必要がありますか? –
jQuery検証プラグインを使用すると、submitをクリックしたときにユーザー入力を検証し、エラーのある入力のすぐ下のラベルにエラーを出力します。このjsfiddleを見れば、便利で便利なデモが表示されます。 –
https://jsfiddle.net/oohd8u22/CIフォームの検証では、検証プラグインを使用して入力を検証しても、私はあなたのために書いたコントローラに表示されていても、まだ検証されていてもユーザ入力をチェックし、入力にエラーがある場合のKOの応答、または検証が正常に実行された場合のOK応答。検証プラグインのエラーをカスタマイズするには、次のようにします:form .error {ここではカスタムCSSルール}エラーの表示方法を変更する場合 –