0

我正在编写一个计划在 Opera 浏览器中使用的(本地主机)网站(因为我的网站使用的是 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,我只想在我在该字段中输入任何内容时验证它

谢谢,

营汤1988

4

2 回答 2

0

这看起来像是插件中的错误(或在 Opera 中,取决于您的观点)。

您可以使用“依赖回调”来解决它,如下所示:

$("#productForm").validate({
    rules: {
        MinPrice: {
            required: function(el) {
                var $el = $(el);
                if(!$el.val()) { $el.val('0') };
                return false;
            },
            number: true
        }
    }
});​

如果我做对了,那么这应该通过插入“0”来强制该字段永远不会为空。

如果插件在其编号验证之前执行其“必需”验证,则此解决方法有可能起作用。

如果它不起作用,那么您可以使用绑定到该字段的“模糊”处理程序来实现相同的效果。

如果您需要区分用户输入的“0”和强制的“fudge-value”,那么您可以强制使用“-1”而不是“0”并相应地测试服务器端。

于 2012-06-09T05:48:27.593 回答
0

这里实际发生的是,在 Opera 中,如果输入的值不是有效数字,则 input.value(以及 Opera 提交的内容)是一个空字符串。有点令人困惑的是,用户输入的内容仍然留在输入中而没有被标记为无效,并且由于 .value 为空,JS 验证也没有发现任何问题。

根据规范,这是正确的,文本“值清理算法如下:如果元素的值不是有效的浮点数,则将其设置为空字符串”,但在 UI 方面它是仍然令人困惑,所以我认为 Opera 应该修复它。

于 2012-06-12T19:30:46.007 回答