0

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

包含在一个名为的 div 中的 htmlaudit_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 调用没问题,因为它一直有效,直到我尝试为选择值添加验证

4

1 回答 1

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();
于 2013-10-26T20:19:31.227 回答