我的 Yii 模型中有两个相关字段。它们是 items_per 和 items_period。
每个项目是一个整数,反映在给定时间段内要处理的项目数。
items_period是该时间段内的秒数(带有标记为秒、分钟、小时的选项的下拉列表)。将 items_per 乘以 items_period 就得到“每秒项目数”。
我设置了一个自定义验证规则来限制每秒的项目超过一定数量。当您更改 items_per 字段中的值(模糊时)时,一切正常,并使用 ajax 验证给出合理的错误消息。
我需要在 items_period 字段发生更改时触发 items_per 字段的验证(可能不允许 100 个/秒,但允许 100 个/分钟)。
我尝试向 items_per 下拉列表添加 onchange 函数以触发 items_per 字段上的“模糊”或“更改”,但它似乎没有发出 ajax 请求进行验证。提交表单只是为了触发验证不是一种选择,因为它可能没有任何错误,并且只是在用户准备好之前保存记录。
有什么建议我可以强制一个字段在另一个字段中触发 ajax 验证吗?
可以通过AJAX实现客户端验证(用JS)and如果您定义了一个扩展的自定义验证器,则对于所有普通请求都放在一个包中CValidator.
对于“普通”验证,请使用正确的属性名称和参数设置验证器并覆盖validateAttribute method.
对于客户端验证,另外覆盖clientValidateAttribute方法。如果为表单启用了客户端验证,这将导致自动调用您的自定义 JS 来验证输入。从覆盖中你将输出 JS 代码在这个上下文中运行:
function(value, messages, attribute) {
// your code goes here
// value: current value of attribute
// messages: array of strings (validation errors) you should append to
// attribute: name of the attribute
}
您可以看到内置验证器如何在此框架中工作一个例子。另请参阅CActiveForm.clientOptions.
对于 AJAX 验证,您can提交表格进行验证。这个想法是您将验证配置为包含特殊参数(例如ajax=something
)或排除其中一个(例如,不包含提交按钮的值)。事实上,Yii 已经通过自动包含一个来做到这一点ajax=formId
所有 AJAX 验证请求中的参数!
通过这种方式,您可以轻松编写始终验证但仅在应该时保存的控制器代码。 Yii 参考中也有一个例子CActiveForm(搜索“为了响应 AJAX 验证请求,我们需要以下类代码:”)。
最后,您可以通过调用 Javascript 以编程方式设置任何属性的验证状态$.fn.yiiactiveform.updateInput。如果你这样做,最好通过调用来继续模仿 Yii$.fn.yiiactiveform.updateSummary
以及。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)