【问题标题】:Contact Form 7 (CF7) Field required if other field filled联系表格 7 (CF7) 如果填写了其他字段,则必须填写该字段
【发布时间】:2022-01-19 13:08:56
【问题描述】:

我有一个 CF7 表格,要求提供 namedate of birth

姓名不是必填字段,但如果输入姓名,生日无论如何都是必需的。 因此,默认情况下不包括出生日期。

CF7 简化代码:

<div class="cf7-conditional-wrapper">
<label>Name [text your-name class:field-a]</label>
<label>Birthday<span class="asterisk-placeholder"></span> [date your-date class:field-b-required-if-a-set]</label>
</div>

在第一步中,我处理该字段也应被 CF7 视为必填字段这一事实。

let cf7_conditional_wrappers = document.getElementsByClassName("cf7-conditional-wrapper");

for (let cf7_conditional_wrapper of cf7_conditional_wrappers) {
    let field_a = cf7_conditional_wrapper.getElementsByClassName("field-a")[0],
        field_b = cf7_conditional_wrapper.getElementsByClassName("field-b-required-if-a-set")[0],
        asterisk_placeholder = cf7_conditional_wrapper.getElementsByClassName("asterisk-placeholder")[0];

    if (field_a && field_b && asterisk_placeholder) {
        checkRequiredFields(field_a, field_b, asterisk_placeholder);
    }
}

function checkRequiredFields(field_a, field_b, asterisk_placeholder) {
    let timeout = null;

    // Listen for keystroke events
    field_a.addEventListener('keyup', function (e) {
        clearTimeout(timeout);

        timeout = setTimeout(function () {
            //console.log('Input Value:', field_a.value);
            //console.log('Input Value Length:', field_a.value.length);

            if (field_a.value.length > 0) {
                // Set Required
                field_b.classList.add('wpcf7-validates-as-required');
                //field_b.classList.add('wpcf7-not-valid');
                field_b.setAttribute("aria-required", "true");
                //field_b.setAttribute("aria-invalid", "false");
                //field_b.setAttribute("required", "");
                //field_b.required = true;
                asterisk_placeholder.textContent = "*";
            } else {
                field_b.classList.remove('wpcf7-validates-as-required');
                //field_b.classList.remove('wpcf7-not-valid');
                field_b.removeAttribute("aria-required");
                //field_b.setAttribute("aria-invalid", "false");
                //field_b.removeAttribute("required");
                //field_b.required = false;
                asterisk_placeholder.textContent = "";
            }

        }, 1000);
    });
}

一切看起来都是正确的,但是在提交表单时没有检查新的必填字段。 有没有人有我没有考虑过的提示?

为了安全起见,我还将通过 PHP 在服务器端解决相同的查询,并查看了以下方法。然而,2015年的入口在第一次测试中没有成功,尽管代码仍然与今天的插件数据库相似。

add_filter( 'wpcf7_validate_date', 'custom_date_confirmation_validation_filter', 20, 2 );
  
function custom_date_confirmation_validation_filter( $result, $tag ) {
  if ( 'birth-date' == $tag->name ) {
    $your_birth_date = isset( $_POST['birth-date'] ) ? trim( $_POST['birth-date'] ) : '';
  
    if ( $your_birth_date != '' ) {
      $result->invalidate( $tag, "Test to override Required Message" );
    }
  }
  
  return $result;
}

2015 年手册中的示例:https://contactform7.com/2015/03/28/custom-validation/

【问题讨论】:

    标签: wordpress contact-form-7


    【解决方案1】:
    add_filter( 'wpcf7_validate_date', 'custom_date_confirmation_validation_filter', 20, 2 );
      
    function custom_date_confirmation_validation_filter( $result, $tag ) {
        
        $name = isset( $_POST['name'] ) ? trim( $_POST['name'] ) : '';
    
      if ( 'birth-date' == $tag->name ) {
        $your_birth_date = isset( $_POST['birth-date'] ) ? trim( $_POST['birth-date'] ) : '';
      
        if ( trim($name) != '' && trim($your_birth_date) == ''  ) {
          $result->invalidate( $tag, "Please enter date of birth" );
        }
      }
      
      return $result;
    }
    

    检查姓名不为空,出生日期是否为空,然后显示警告消息。

    【讨论】:

    • 非常感谢 Mohammed Abrar Ahmed。我什至可以为重复的表单条目自定义它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2017-08-06
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多