2013-10-26 63 views
0

我有一个表格,如果用户选择值1表示提交表格,但如果他们选择2或3他们必须从类别reason select(那里选择一个值是三个选择与类reason select,我刚所示的一个这样的问题,以保持代码越短POSS)确认选择阿贾克斯呼叫值的问题

,其被包裹在一个div的HTML称为audit_content

<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调用是确定的,因为它的工作,直到我试图添加验证的选择值

+0

对于我来说缺少太多的HTML以进一步调查...... – gkalpak

+0

需要哪些html位?整个批次约为600行 – tatty27

+0

在发布的JS中引用的部分(例如'.form_id'等)。一个** [SSCCE](http://sscce.org)**或一个** [JS小提琴](http://jsfiddle.net)**也将有所帮助... – gkalpak

回答

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(); 
+0

该表是许多创建使用while循环,form_id用于识别显示ajax结果的正确div,我将为我的问题添加更多信息。恐怕你现在建议的改正总是要求选择一个理由,但别无其他,但是无论如何感谢 – tatty27

+0

@ tatty27,我错误地让'parent'而不是'parents',产生了很大的差异 –

+0

是的,其他所有的东西都应该工作......当然......除了这样一个事实,即如果用户在第一次选择时选择“1”并且大约十多个错误和错别字......,则表单将永远不会被提交... :) – gkalpak