选择单选时仅需要文本字段。 ZF2

Only require textfield when radio is selected. ZF2

在 ZF2 中,是否可以仅在选择单选按钮时才需要文本字段?像这样..

不,在 ZF2 中没有办法,您可以使用 javascript 的 jQuery 添加验证:

像这样:

$('radio').click(function(){
  if($(this).val() == 'other') {
     $('textfield').prop('required',true);
  }
});

Onclick 任何单选按钮上的客户端事件和 zf2 在服务器端运行。因此,在将数据提交到服务器之前,您不能执行此操作。

您可以使用 JavaScript 库 jQuery 来执行此操作。

$(document).ready(function() {
   $("#Radiobuttons").click(function() {
       if($(this).attr('id') == "Other") {
            //IF THE ID IS "OTHER"
            $("#foo").show();           
       }  else {
            //IF THE ID IS NOT "OTHER"
            $("#foo").hide();   
       }
   });
});

因为只有这样,用户可以提交文本框为空的表单,并勾选复选框,您可以使用这个脚本。

//CHECK IF THE FORM IS SUBMITTED
if ( $("#foo").css('display') != 'none' ){
    //The text box is visible. Now check if it's empty, with
    //jQuery, PHP, or any other thing you use.
}

我知道这个问题很老了,但也许有人会利用它。 一种方法。

在表单 class 中从 __construct 中删除 inputFilter 方法。然后在你的 inputFilter 方法中(让它命名为 addInputFilter)添加这样的参数:

public function addInputFilter(array $data) {

$inputFilter = new InputFilter();
$this->setInputFilter($inputFilter)


//your inputfilters

if ($data['radiofield'] === 'something') { 
    //add next inputfilters 
} 

//your inputfilters

}

接下来,转到调用表单的地方(可能是控制器?):

$data = $this->request->getPost();

$form->setInputFilter($form->addInputFilter($data->toArray()));
$form->setData($data);

// next check if form is valid etc. 

就是这样。