0

送信ボタンをクリックすると、このフォームをシリアル化できます。

   <form class="cashier_forms" action="<?php echo base_url().'index.php/'.$this->uri->segment(1).'/'.$this->uri->segment(2)?>/addCashierCount" id="form_cashier_count" rel="ajax_message">
       <p id="cashier_count_p" class="hidden">
          <label for="recipe_id">Count</label>
          <input placeholder="Cashier count for this Recipe" class="all_curve_small cashier_inputs" name="cashier_count" id="cashier_id" />
          <input id="yield_recipe_id" type="text" name="yield_id_input" value="<?php echo $ayr_recipe->yieldID?>" />
          <input type="text" name="count_date" value="<?php echo $date_now?>" />
          <input type="submit" class="buttons count_submit" rel="form_<?php echo $this->tbl_count_name ?>" value="Add Count" />
       </p>
    </form>

これはおそらく私のフォームをシリアル化する私のjqueryです。

   $('.count_submit').click(function(e){
      e.preventDefault();
      var form    = '#'+ $(this).attr('rel');
      var url  = $(form).attr('action');
      var target  = '#'+ $(form).attr('rel');
      $(target).slideUp();
      $.post(url, $(form).serialize(),function(data) {
         $(target).html(data).slideDown(function(){
            if(data == '<div class="ok">Added</div>'){
            setTimeout(refresh,3000)
            window.location = '<?php echo base_url()?>index.php/cashier/cashier_lo';
            }
         });
      });
    });

しかし、アクションが処理されているとき、データは保存されません。フォームはシリアル化されていないと思います。誰かが私が合計を逃していないかどうかを確認できますか?

4

1 に答える 1

2

これはあなたにフォームを与えません:

var form = '#'+ $(this).attr('rel');

これによりrel、送信ボタンの属性が得られます(ちなみに、そのような属性すらありません)。そして、その.serialize()上でメソッドを呼び出すことは無意味です。フォームにアクセスします。クリックハンドラー内では、これはクリックされた要素(フォームではなくボタン)を指していることに注意してください。それで:

var form = $(this).closest('form');

これは、ボタンのクリックイベントではなく、フォームの送信イベントをサブスクライブすることをお勧めします。ユーザーが入力フィールド内でEnterキーを押した場合はどうなりますか?フォームが送信され、クリックハンドラーが実行されることはありません。

それでは、物事を片付けましょう:

$('#form_cashier_count').submit(function(e) {
    e.preventDefault();
    var form = $(this);
    var target = form.attr('rel');
    $(target).slideUp();
    $.post(this.action, form.serialize(), function(data) {
        $(target).html(data).slideDown(function() {
            if (data == '<div class="ok">Added</div>') {
                setTimeout(refresh, 3000);
                window.location = '<?php echo base_url()?>index.php/cashier/cashier_lo';
            }
        });
    });
});
于 2012-06-14T07:35:45.537 に答える