验证ajax调用的select值的问题

时间:2013-10-26 19:54:23

标签: javascript php jquery ajax

我有一个表单,如果用户选择值为1,则提交表单,但如果他们选择2或3,则必须从具有类reason select的select中选择一个值(有三个选择类reason select,我刚刚展示了一个这个问题,以保持代码尽可能短)

包含在名为audit_content

的div中的html
 <tr>
    <td>
        <select name="grade" class="grade" >
            <option value="1">1 - Perfect</option>
            <option value="2">2 - Diagnostic</option>
            <option value="3">3 - Unusable</option>
        </select>
    </td>
</tr>
<tr>
    <td>
        <select name="exposure_reason" class="reason_select" >
            <option value="1">Reason One</option>
            <option value="2">Reason Two</option>
            <option value="3">Reason Three</option>
        </select>
    </td>
</tr>
<tr>
    <td>
    <input type="button" class="delete_submit delete_from_audit" value=""
        onClick="delete_image('<? echo $image_id; ?>','<? echo $audit_id; ?>')" />
    <input type="button" class="reset_grade control_submit ie7_reset"     
        onclick="reset_image('<? echo $image_id; ?>','<? echo $audit_id; ?>')" value="" >
    <input type="hidden" class="form_id" value="<? echo $i; ?>" >
    <input type="button" name="audit_submit"
        class="audit_submit audit_submit_btn ie7_submit" value="" />
    </td>
</tr>

jquery

  $(document).ready(function(){
    $('#audit_content').on("click", ".audit_submit", function(){
      var form_id = $(this).prev('.form_id').val();
      alert(form_id);
      var $form = $(this);
      reasonHasVal = false;
      if ($form.find('select[name="grade"]').val() != "1") {
       $form.find("select.reason_select").each(function() {
           if ($(this).val() != "") {
               reasonHasVal = true;
                $.ajax({
                type: "POST",
                url: "ajax/image_audit.php",
                dataType: "json",
                data: $('#audit_form'+form_id).serialize(),
                success: function(response){
                $('.audited_ok_tick'+form_id).html(response);
            },
          error:function (xhr, ajaxOptions, thrownError){
          alert(thrownError);
        }
     });
     return false;
    }
       });
       if (!reasonHasVal) {
           e.preventDefault();
           alert("Please select a reason.");
       }
     } 
  });
}); 

单击提交按钮时,form_id的警报无效,我知道ajax调用正常,因为它一直有效,直到我尝试为选择值添加验证

1 个答案:

答案 0 :(得分:1)

我看到了几个问题:

首先,您应该在控制台中看到错误,因为您致电e.preventDefault()但未定义e。因此,在为click事件注册匿名函数时,您需要添加e

$('#audit_content').on("click", ".audit_submit", function (e) {

其次,$form将是对您按钮的引用,$form.find('select[name="grade"]')将始终为空。如果您发布所有代码可能会更清楚,但我想您的意图是将每个问题单独发布并由form_id标识?我猜测某处未显示,也许是一个公共表,form_id值用作元素的id。在这种情况下,您将需要此代码:

var $form = $(this).parents('#' + form_id);

如果我的假设是正确的,那么其他一切都应该正常工作。如果我的假设不正确,那么你需要找到一些更好的方法来找到输入控件。一些替代方案是:

var $form = $(this).parents('table');
var $form = $(this).parent().parent().parent();