【发布时间】:2013-10-10 15:08:30
【问题描述】:
在阅读了一堆问题并对其应用“解决方案”后,我发现 jQuery 验证器没有验证 onkeyup。默认情况下,它应该。我确保没有通过下载新文件来修改源代码,什么都没有。
版本:jquery 1.10.2
Validation code:
/* check form */
$("#registerForm").validate({
/* rules: {
primaryPhone: {skip_or_fill_minimum: [2,'.firstPhoneSet']},
contactPrimary: {skip_or_fill_minimum: [2,'.firstPhoneSet']},
secondaryPhone: {skip_or_fill_minimum: [2,'.phoneNum2']},
contactSecondary: {skip_or_fill_minimum: [2,'.phoneNum2']}
}*/
onkeyup: function(element)
{
$(element).valid();
},
errorElement: "span",
rules:
{
birthMonth:
{
skip_or_fill_minimum: [3,'.dob']
},
birthDay:
{
skip_or_fill_minimum: [3,'.dob']
},
birthYear:
{
skip_or_fill_minimum: [3,'.dob']
},
resume:
{
required: true,
extension: "txt|doc|docx"
},
gender:
{
required: true
},
ohlWhy:
{
required: true,
wordCount: ['30']
},
coping:
{
required: true,
wordCount: ['20']
},
intensity:
{
required: true,
wordCount: ['20']
}
}
});
注意:
我已经尝试在没有的情况下运行此代码
onkeyup: function(element)
{
$(element).valid();
},
我还有一个 addClassRules 方法调用:
jQuery.validator.addClassRules({
field:
{
required: true,
minlength: 2
},
zip:
{
required: true,
digits: true,
minlength: 5,
maxlength: 5
},
years:
{
required: true,
digits: true,
minlength: 1,
maxlength: 2
},
phoneNum:
{
required: true,
phoneUS: true
},
phoneNum2:
{
required: false,
phoneUS: true
},
dropList:
{
required: true
},
dob:
{
date: true,
required: true
},
});
什么都没有。这是我在另一个问题上找到的解决方案,但这给了我错误:
Uncaught TypeError: Object [object Object] has no method 'valid'
这看起来很奇怪,因为.valid() 是一个验证器方法。
HTML 有很多输入字段:
<form id="registerForm" action="index.cfm" method="post">
<fieldset>
<legend>Basic Information</legend>
<div class="insets">
<label class="control-label" for="fName">First Name: </label>
<input type="text" name="fName" id="fName" class="field" value="<cfoutput>#session.fName#</cfoutput>" /><br />
<label class="control-label" for="lName">Last Name: </label>
<input type="text" name="lName" id="lName" class="field" value="<cfoutput>#session.lName#</cfoutput>" /><br />
<label class="control-label" for="nick">Nickname: <span class="optional">*optional</span></label>
<input type="text" name="nick" id="nick" value="<cfoutput>#session.nick#</cfoutput>" /><br />
</div>
</fieldset>
<br />
<input type="hidden" value="2" id="volType" name="volType" />
<br />
<!--- only show after choice has been made --->
<div id="allInfo">
<fieldset>
<legend>Contact Information</legend>
<div class="insets">
<label class="control-label" for="emailAddy">Email: </label>
<input type="email" class="input-xlarge" name="emailAddy" id="emailAddy" required value="<cfoutput>#session.emailAddy#</cfoutput>" /><br />
<!--- show only to shl vols --->
<span id="shlOnly">
<label class="control-label" for="rainnEmail">RAINN Email: </label>
<input type="email" name="rainnEmail" class="input-xlarge" id="rainnEmail" required value="<cfoutput>#session.rainnEmail#</cfoutput>" /><br />
</span>
<!--- end show only --->
<!--- only show to rcc and website vols --->
<span id="rccANDwebs">
<label class="control-label" for="address1">Address: </label>
<input type="text" name="address1" class="input-xlarge field" id="address1" value="<cfoutput>#session.address1#</cfoutput>"/><br />
<label class="control-label" for="address2">Apartment, Suite, etc:
<span class="optional">*optional</span></label>
<input type="text" name="address2" class="input-xlarge" id="address2" value="<cfoutput>#session.address2#</cfoutput>" /><br />
<label class="control-label" for="city">City: </label>
<input type="text" class="field" name="city" id="city" value="<cfoutput>#session.city#</cfoutput>" /> <br />
</span>
<!--- end show only --->
<label class="control-label" for="state">State: </label>
<select id="state" class="input-mini dropList" name="state">
<option value="">--</option>
<cfoutput query="states">
<option value="#states.id#" <cfif #session.state# EQ #states.id#>selected="selected"</cfif>>#states.stateName#</option>
</cfoutput>
</select>
<label class="control-label" for="zip">Zip: </label>
<input type="text" name="zip" class="input-small zip" id="zip" value="<cfoutput>#session.zip#</cfoutput>" />
<label class="control-label" for="primaryPhone">Primary Phone: </label>
<input type="text" class="input-medium phoneNum firstPhoneSet" name="primaryPhone" id="primaryPhone" placeholder="703-555-1010" value="<cfoutput>#session.primaryPhone#</cfoutput>" />
<br /><span class="optional">Can we leave a message at this number?</span><br />
<label class="radio inline" for="contactPrimaryYes">
<input type="radio" checked name="contactPrimary" id="contactPrimaryYes" value="yes" />Yes
</label>
<label class="radio inline" for="contactPrimaryNo">
<input type="radio" name="contactPrimary" id="contactPrimaryNo" value="no" />No
</label>
<label class="control-label" for="secondaryPhone">Secondary Phone:
<span class="optional">*optional</span></label>
<input type="text" class="input-medium phoneNum2" name="secondaryPhone" id="secondaryPhone" placeholder="703-555-1010" value="<cfoutput>#session.secondaryPhone#</cfoutput>" />
<br /><span class="optional">Can we leave a message at this number?</span><br />
<label class="radio inline" for="contactSecondaryYes">
<input type="radio" name="contactSecondary" id="contactSecondaryYes" value="yes" <cfif IsDefined("session.contactSecondary") AND session.contactSecondary EQ "yes">checked</cfif> />Yes
</label>
<label class="radio inline" for="contactSecondaryNo">
<input type="radio" name="contactSecondary" id="contactSecondaryNo" value="no" <cfif IsDefined("session.contactSecondary") AND session.contactSecondary EQ "no">checked</cfif> />No
</label>
</div>
</fieldset>
<!--- if rcc or web --->
<div class="form-actions" id="non-shlButton">
<button type="submit" style="float:right;" class="btn btn-success">Continue to Step 2 »</button>
</div>
<!--- if shl --->
<div class="form-actions" id="shlButton">
<button type="submit" style="float:right;" class="btn btn-primary">Submit My Application</button>
</div>
</div> <!--- end show after choice --->
</form>
所以我的问题是:为什么我的脚本只验证 onfocusout 和 onsubmit? (当它解决了几个相同类型的问题时,为什么会出现这个错误?)
【问题讨论】:
-
$(element).valid()假定valid是附加到 jQuery.fn 对象的方法,因为您已将element包装在 jQuery 选择器中。我不是 Validator 专家,但请尝试使用console.log(element)来查看它是否是您真正想要包含在 jQuery 选择中的东西。 -
<input type="text" name="fName" id="fName" class="field valid" value>这是我正在输入的元素。 -
@rescuecreative @Mathletics 这会产生:
Uncaught TypeError: Object #<HTMLInputElement> has no method 'valid' -
是的,我实际上并没有这么建议。我只是建议您将其记录到控制台并确保您使用的是正确类型的对象。这是一个即兴的建议,因为我不熟悉验证器。我以外的其他人需要帮助解决这个问题。
-
@Sparky github.com/jzaefferer/jquery-validation/issues/541 我也刚刚注意到奇怪的行为。当我回到无效字段,删除并开始输入时,它可以正确执行,但采用
onkeypress样式。我也不明白你说的无关。我添加了验证器类规则(不要评判我,我没有编写规则,我只是在使用我得到的东西哈哈),它将所有类名“字段”链接到验证器
标签: jquery jquery-validate onkeyup