因为jq 的验证检测html中的属性for="input的name"和generated="true"相符时才替换,否则会新插入一个html标签,这样会导致jq不会消除ci的错误提示,如ci提示"验证码错误",当用户输入正确的验证码时,ci的提示并不会被jq的替换或隐藏,逻辑上不符合.
比较方便的修改是直接修改ci的form错误输出提示html标签格式成jq的相同格式即可;
修改ci的Form_validation.php类中的方法错误输出格式;同时可以把它的<p></p>标签改成其它inline格式,一般我们很少用得上换行格式的标签输出错误,大多时候,我们是直接在input的后面输出提示的;然后每次使用都设置这个标签很麻烦.
修改如下
return '<label for="' .$field.'" generated="true" class="error">'. $prefix.$this->_field_data[$field]['error'].$suffix .'</label>';//修改配合jq的validation
--------------
/**
* Get Error Message
*
* Gets the error message associated with a particular field
*
* @access public
* @param string the field name
* @return void
*/
function error($field = '', $prefix = '', $suffix = '')
{
if ( ! isset($this->_field_data[$field]['error']) OR $this->_field_data[$field]['error'] == '')
{
return '';
}
if ($prefix == '')
{
$prefix = $this->_error_prefix;
}
if ($suffix == '')
{
$suffix = $this->_error_suffix;
}
return '<label for="' .$field.'" generated="true" class="error">'. $prefix.$this->_field_data[$field]['error'].$suffix .'</label>';//修改配合jq的validation
}
------------------
修改后ci错误输出格式
----
<span class="verifyERR"><label class="error" generated="true" for="verify"><label>验证码有误</label></label></span>
----
jq的错误插入动作已被修改成在<span class="input的name+ERR">标签内插入方式;
-------------------
jQuery.extend(
jQuery.validator.defaults, {
errorPlacement:function(error, element) {//自定错误显示对象
var formId = element[0].form ? element[0].form.id : null;
if (! formId){
return alert('form对象必须增加ID属性');
}
var tipClass = element[0].name + 'ERR';
var tipObj = $('#' + formId + ' .' + tipClass);
if (! tipObj.length){
return alert('在form找不到出错提示对象: <span class=' + tipClass + '></span>,需要增加');
}else{
error.appendTo( tipObj );
}
}
}
);
----------
ci的错误提示
---
输入错误后,jq错误提示,替换掉ci的错误提示