我正在编写一个计划在Opera浏览器中使用的(localhost)网站(因为我的网站使用的是HTML5)。在网站的一部分,我有一个表格,其中一个字段是一个数字。我正在尝试使用jQuery Validate插件来验证该条目是一个数字,但它不是必需的。
我希望这是解决方案,它适用于Chrome,但在Opera中,验证会被忽略
<form id="productForm">
<input type="text" name="MinPrice" id="Minprice" />
<input type="submit" value="OK" />
</form>
$("#productForm").validate({
rules: {
MinPrice: {
number: true
}
}
});
为了让jQuery在Opera中验证一个数字,似乎我必须写:
<form id="productForm">
<input type="text" name="MinPrice" id="Minprice" />
<input type="submit" value="OK" />
</form>
$("#productForm").validate({
rules: {
MinPrice: {
number: true,
required: true
}
}
});
但问题是我不想要MinPrice,我想只在我输入任何内容时验证它
谢谢,
CampSoup1988
答案 0 :(得分:0)
这看起来像是插件中的错误(或者根据您的观点而在Opera中)。
您可以使用“依赖关系回调”解决此问题,如下所示:
$("#productForm").validate({
rules: {
MinPrice: {
required: function(el) {
var $el = $(el);
if(!$el.val()) { $el.val('0') };
return false;
},
number: true
}
}
});
如果我说得对,那么这应该通过插入'0'强制该字段永远不会为空。
提供插件在其数字验证之前执行其“必需”验证,此解决方案有可能工作。
如果它不起作用,那么你可以通过绑定到该字段的'blur'处理程序获得相同的效果。
如果您需要区分用户输入的'0'和强制的“软糖值”,那么您可以强制'-1'而不是'0'并相应地测试服务器端。
答案 1 :(得分:0)
这里实际发生的是,在Opera中,如果键入的值不是有效数字,则input.value(以及Opera提交的内容)是一个空字符串。有些令人困惑的是,用户键入的内容仍然保留在输入中而不会被标记为无效,并且由于.value为空,因此JS验证也没有任何问题。
根据the spec,这是正确的,文本“值清理算法如下:如果元素的值不是有效的浮点数,则将其设置为空字符串”,但是UI方面它仍然令人困惑所以我认为Opera应该修复它。