【问题标题】:Ajax doesn't work on all my formsAjax 不适用于我的所有表单
【发布时间】:2013-06-03 13:38:53
【问题描述】:

我正在使用 ajax 来验证我的表单,但我的表单在 php 中处于 while 循环中,并且我的请求 ajax 仅适用于我的第一个表单。

我的代码:

阿贾克斯:

<script type="text/javascript">

$(document).ready(function() {
$('#form_entourage').on('submit', function() {

    var nom = $('#entourage_nom_1').val();
    var prenom = $('#entourage_prenom_1').val();

    if(nom == '' || prenom == '') {
        alert('Les champs doivent êtres remplis');
    } else {
        $.ajax({
            url: $(this).attr('action'),
            type: $(this).attr('method'),
            data: $(this).serialize(),
            dataType: 'json',
            success: function(json) {
                if(json.reponse == 'ok') {
                    alert('Tout est bon');
                } else {
                    alert(''+ json.reponse);
                }
            }
        });
    }
    return false;
});
});

</script>

PHP 表单: 我的循环while和我的ajax只在一种形式上工作。 例如:当我有 3 个成员时,我的 ajax 验证仅在第一个成员上工作 成员和我的第二个成员我重定向了我的 php 验证。

        while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
       printf ("

              <h3>Membre ".$numero_membre."</h3>");
       $numero_membre = $numero_membre+1;
       printf ("
<form class='form-horizontal' id='form_entourage' method='post' action='modif/mod_entourage.php' style='height: 670px;'>
          <span class='span5 control-group'>
            <label for='entourage_nom_1'>Nom</label>
            <input class='span5' type='text' name='entourage_nom_1' value='".$row["nom"]."' >
            <input type='hidden' name='id_entourage' value='".$row["id_entourage"]."' >
          </span>
          <span class='span5 control-group'>
            <label for='entourage_prenom_1'>Prénom</label>
            <input class='span5' type='text' name='entourage_prenom_1' value='".$row["prenom"]."' >
          </span>
<span class='span5 control-group'>
<input type='submit' name='mod_entourage' id='mod_entourage' class='btn btn-primary pull-right' value='Modifier' /></span>
          </form>
          <div class='clear'></div>
");
    }

有人可以帮帮我吗?

【问题讨论】:

    标签: php jquery sql ajax forms


    【解决方案1】:

    您对所有表单都使用相同的 id。在表单 ID 中附加一个计数器变量。它肯定会为你工作。你的表单ID可以是这样的

     <form id="form_entourage_ 1" data-idval="1" .. >..Similarly change id for other elements</form>
    
     <form id="form_entourage_ 2" data-idval="2" .. >..</form>
    
     <form id="form_entourage_ 3" data-idval="3" .. >..</form>
    

    jQuery :-

       $("[id^='form_entourage']").on('submit', function() {
             var clicked_id = $(this).data('idval');
    
             var nom = $('#entourage_nom_'+clicked_id).val();
             var prenom = $('#entourage_prenom_'+clicked_id).val();
             ...........
             ...........
        });
    

    【讨论】:

      【解决方案2】:

      您的表单只使用一个 id,这就是为什么它只适用于第一次。

      【讨论】:

        【解决方案3】:

        好的,这已经回答了,但我认为使用类它会做得更好(不需要额外的标记,没有 ids,没有数字,XD):

         $("form.AJAX").on('submit', function() {
           // Catching the DOM element which trigger the event 
           var $form = $(this);
        
           // Now, from the form which trigger the submit event, take the values
           var nom    = $form.find('input[name="entourage_nom"]').val();
           var prenom = $form.find('input[name="entourage_prenom"]').val();
           ...........
           ...........
         });
        
         //HTML:
        
        <form class='form-horizontal AJAX' id='form_entourage' method='post' action='modif/mod_entourage.php' style='height: 670px;'>
          <span class='span5 control-group'>
            <label for='entourage_nom'>Nom</label>
            <input class='span5' type='text' name='entourage_nom' value='".$row["nom"]."' >
            <input type='hidden' name='id_entourage' value='".$row["id_entourage"]."' >
          </span>
          <span class='span5 control-group'>
            <label for='entourage_prenom'>Prénom</label>
            <input class='span5' type='text' name='entourage_prenom' value='".$row["prenom"]."' >
          </span>
          <span class='span5 control-group'>
            <input type='submit' name='mod_entourage' id='mod_entourage' class='btn btn-primary pull-right' value='Modifier' />
          </span>
        </form>
        
        <!-- This second FORM will also work, even having the same markup -->
        <form class='form-horizontal AJAX' id='form_entourage' method='post' action='modif/mod_entourage.php' style='height: 670px;'>
          <span class='span5 control-group'>
            <label for='entourage_nom'>Nom</label>
            <input class='span5' type='text' name='entourage_nom' value='".$row["nom"]."' >
            <input type='hidden' name='id_entourage' value='".$row["id_entourage"]."' >
          </span>
          <span class='span5 control-group'>
            <label for='entourage_prenom'>Prénom</label>
            <input class='span5' type='text' name='entourage_prenom' value='".$row["prenom"]."' >
          </span>
          <span class='span5 control-group'>
            <input type='submit' name='mod_entourage' id='mod_entourage' class='btn btn-primary pull-right' value='Modifier' />
          </span>
        </form>
        

        然后,即使您的所有表单都具有完全相同的标记,它们也会完美运行,因为您只指触发提交的人:保存编码!

        【讨论】:

          猜你喜欢
          • 2015-03-23
          • 2016-03-21
          • 2012-08-23
          • 1970-01-01
          • 2019-01-14
          • 2013-05-31
          • 2019-10-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多