jquery 无法提交带有隐藏必填字段的表单

sigwle7e  于 2023-06-22  发布在  jQuery
关注(0)|答案(1)|浏览(191)

我使用jQuery设置了一个隐藏的必填字段。每当用户试图提交表单时,它都会给出一个错误,说“您的提交有问题。请检查下面的字段。”但是当我检查字段时,没有显示任何错误。我使用隐藏的必填字段作为条件语句,如果衬衫的数量不等于参与者的数量,则显示隐藏的必填字段,如果它们相等,则隐藏必填字段,这将允许用户继续成功提交表单。

$('#input_1_36_1,#input_1_18').change(function() {
  var participants = $('#input_1_36_1');
  var shirts = $('#input_1_18');
  var error = $('#field_1_45');
  if (Number(participants.val()) === Number(shirts.val())) {
    error.hide();
    //$('#field_1_48').hide(); //fake shirts
    $('#field_1_18').show(); //shirts
    $('#field_1_48').prop("class", "gf_invisible");
  } else {
    error.show();
    error.css('color', 'red');
    $('#field_1_48').show(); //fake shirts
    $('#field_1_18').hide(); //shirts
    // $('#input_1_48').prop("class", "gf_hidden");
    //$('#input_1_48').prop("readonly", true);
    //  $('#field_1_48').prop("class","gf_invisible");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
html here!
bqjvbblv

bqjvbblv1#

使用JS隐藏一个字段不会改变它的必需状态。在PHP中需要自定义验证。就像这样:

// Ignore value of field 48 and set it valid if values of fields 36.1 and 18 are equal.
add_filter( 'gform_field_validation_1_48', function ( $result, $value, $form, $field ) {
    $participants = rgpost( 'input_36.1' );
    $shirts = rgpost( 'input_18' );
    if ( $participants === $shirts ) {
        $result['is_valid'] = true;
        $result['message']  = '';
    }

    return $result;
}, 10, 4 );

另一个更简洁的选择是使用gform_pre_validation

add_filter( 'gform_pre_validation', 'my_conditional_requirement' );
function my_conditional_requirement( $form ) {
    $participants = rgpost( 'input_36.1' );
    $shirts = rgpost( 'input_18' );
    if ( $participants !== $shirts ) {
        return $form;
    }

    foreach ( $form['fields'] as &$field ) {
        if ( $field->id == 48 ) {
            $field->isRequired = false;
        }
    }
    return $form;
}

相关问题