jQuery验证Opera中不需要的数字

时间:2012-06-09 02:00:45

标签: jquery forms jquery-validate validation opera

我正在编写一个计划在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

2 个答案:

答案 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应该修复它。