我目前正在使用允许用户创建新表单字段的代码,然后根据需要或不需要将其设置为。我遇到的问题是,由于这是一个组件,而不是在模型中,如果db中的验证等于1,我就无法将其添加到规则中。
如何动态地为规则添加值?或者至少在这些字段中添加错误。 IE浏览器。将验证器添加到具有必填字段1
值的所有attrclass DynamicForm extends CWidget {
public $attributes = array();
public $id = null;
public $enctype = null;
public $target = null;
public $action = null;
public $model_name = '';
public $method = 'post';
public function init() {
parent::init();
}
public function run() {
foreach ($this->attributes as $attr) {
$attr['formname'] = $this->model_name . '_' . $attr['name'];
$attr['htmlOptions'] = array('class' => 'span5', 'placeholder' => $attr['name']);
$attr['htmlOptions']['class'] .= ' form-control';
if ($attr['required'] === 1){
$attr['requiredfields'] = array('required' => true);
}else{
$attr['requiredfields'] = '';
}
if ($attr['type'] == 'text') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::textField($attr['formname'], $attr['value'], $attr['htmlOptions']);
echo '</div>';
}
elseif ($attr['type'] == 'radio') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::radioButton($attr['formname'],$attr['requiredfields']);
echo '</div>';
}
elseif ($attr['type'] == 'textarea') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::textArea($attr['formname'], $attr['value'], $attr['htmlOptions']);
echo '</div>';
}
elseif ($attr['type'] == 'select') {
$items = explode(',', $attr['options']);
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
//echo CHtml::dropDownList($attr['formname'], $attr['value'], array($items));
echo CHtml::dropDownList($attr['formname'], $attr['value'], $items, array('class'=>'form-control','prompt'=>'Please Choose'));
echo '</div>';
}
elseif ($attr['type'] == 'boolean') {
echo '<div class="form-group">';
echo CHtml::label($attr['name'], $attr['formname'],$attr['requiredfields']);
echo CHtml::radioButtonList($attr['formname'], $attr['value'], array('No' => 0, 'Yes' => 1));
echo '</div>';
}
}
}
}
编辑 这个问题似乎出现在我的用户模型和这个函数中
public function getDynamicFormConfig() {
// For each attribute in
$varibles = array();
//echo sizeof($this->type->userTypeVariables);
if (sizeof($this->type->userTypeVariables) > 0) {
foreach ($this->type->userTypeVariables as $var) {
//$varibles[] = $var;
$varibles[] = array(
'id' => $var->id,
'name' => $var->name,
'type' => $var->type,
'value' => $this->getDynamicVaribleValue($var->name),
'required' => $var->required,
'options' => $var->htmlOptions,
);
if ($var->required) {
$var->validatorList->add(
CValidator::createValidator('required',$this->getDynamicVaribleValue($var->name),'')
);
}
}
}
return $varibles;
}
特别是这些行
if ($var->required) {
$var->validatorList->add(
CValidator::createValidator('required',$this->getDynamicVaribleValue($var->name),'')
);
}
我的表格
<div class="clearfix"></div>
<?php
$varform = new DynamicForm();
$varform->attributes = $user->getDynamicFormConfig();
$varform->model_name = 'user';
echo $varform->run();
?>
<div class="clearfix"></div>
<div class="form-actions marginTopHalf marginBotHalf">
<?php
$this->widget('booster.widgets.TbButton', array(
'buttonType' => 'submit',
'context' => 'primary',
'label' => $user->isNewRecord ? 'Sign Up for this event' : 'Save',
));
?>
</div>
答案 0 :(得分:1)
检查此链接,希望它能帮到你......
http://www.jquerybyexample.net/2012/01/jquery-validation-using-class-required.html
我也复制代码并粘贴到下面,如果链接不起作用,那么人们可以从这里阅读并获得帮助..
------从上面链接复制------------------------------------- ---------------
好吧,5天前我收到了我的一位读者的邮件,他写了这封邮件&#34;我需要使用Jquery通过循环Class属性来验证html页面[&#34; Class = Required&# 34;]如果label属性包含&#34; required&#34;然后我应该验证用户的警报&#34;请输入您的值&#34;并将焦点设置为空控制以输入值。请建议如何在Jquery编码&#34;。
中执行此操作注意:我没有写博客阅读器的名称,因为我不确定他是否想要他的名字。
他有一个HTML表单,其中包含名称,公司,职位,电话和电子邮件等输入。点击“提交”,他想验证具有&#34; class = required&#34;的输入。所以我为他的问题创建了一个演示页面并向他发送解决方案。
下面是jQuery代码,它解决了他的问题。单击“提交”按钮,它将遍历所有具有&#34; .required&#34;的输入类型。类。并检查该值,如果它为空,则显示警报并将焦点设置到文本框。
01
$(document).ready(function(){
02
$('#btnSubmit').click(function(){
03
$("input.required").each(function(){
04
if($(this).val().length == 0)
05
{
06
alert('Please Enter your value');
07
$(this).focus();
08
return false;
09
}
10
});
11
//else submit your form.
12
});
13
});
查看现场演示和代码 然后第二天我收到了他发来的另一封电子邮件说&#34;我需要通过JQuery Validation实现,&lt; Label&gt; tag有&#34; class.required&#34;属性不是&lt; Input&gt;标签,那些标签有&#34; class.required&#34;属性只有那些需要在使用过程中验证的单击comman按钮,这个JQuery脚本应该在整个网站上全局使用。&#34;
所以他的问题是标签标签是&#34;必需&#34;而不是输入标签。我提供给他的解决方案,假设输入标签具有所需的类,因为他没有提到标签标签具有&#34; .required&#34;他第一封电子邮件中的课程在他的下一封电子邮件中,他还向我发送了HTML代码。首先来看看HTML代码。 (我没有把整个代码。)
1
<div class="formField">
2
<label for="txtFullName" class="required">Name</label>
3
<input id="txtFullName" type="text" name="Full_Name" />
4
</div>
他正在使用课程&#34; .reuqired&#34;带有标签以及属性的HTML。 for属性指定标签绑定到哪个表单元素。所以它让我思考了2分钟,但我找到了解决方案。这一次,我正在遍历所有标签,其中包含了#34; .required&#34;类。并获得属性的值。由于for属性值与textbox id相同。所以基于for属性值,我使用jQuery选择器创建了对象。休息等于以前的解决方案。
01
$(document).ready(function(){
02
$('#btnSubmit').click(function(){
03
var bSubmit = true;
04
$("label.required").each(function(){
05
var txtAttrb = $(this).attr('for');
06
if(txtAttrb.length > 0)
07
{
08
var txtVal = $("input[id=" + txtAttrb + "]");
09
if(txtVal.val().length == 0)
10
{
11
alert('Please Enter your value');
12
txtVal.focus();
13
bSubmit = false;
14
return false;
15
}
16
}
17
});
18
19
if(bSubmit == true)
20
{
21
//submit the form.
22
}
23
});
24
});
查看现场演示和代码 希望这对你也有帮助