【问题标题】:jQuery Validate number that is not required in OperajQuery 验证 Opera 中不需要的数字
【发布时间】:2012-06-09 02:00:45
【问题描述】:

我正在编写一个计划在 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,我只想在我在字段中输入任何内容时验证它

谢谢,

CampSoup1988

【问题讨论】:

  • 我猜 type="number" 混淆了 jQuery 插件并使其无法运行验证(除非还需要输入)?你能写一个小演示,例如在 jsfiddle.net 上吗?
  • 请用绿色复选标记将我的答案标记为“已接受”,以便其他有此问题的人可以轻松找到解决方案。谢谢:)

标签: jquery forms jquery-validate validation opera


【解决方案1】:

这看起来像是插件中的错误(或在 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”并相应地测试服务器端。

【讨论】:

  • 我把一行改成了 if(!$el.val()) { $el.val('') };因为我希望默认值为空而不是零,只要输入类型是文本,您的解决方案就可以工作,我看到我在我的问题中不小心写了,但我使用的是输入类型编号,它仍然不能用于输入输入数字。
  • 啊,HTML5 完全是另一回事。就我个人而言,我会坚持使用type="text" 并使用pattern="regexp" 属性来限制用户可以输入的内容,并避免需要使用验证插件来验证该字段,这显然表现出type="number" 的不可靠行为。
【解决方案2】:

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

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

【讨论】:

  • 那么有什么办法可以解决这个问题并且仍然使用数字输入吗?或者有没有办法让文本输入与数字输入的界面一起工作?
  • 简短回答:不,因为这是一个您无法从 JavaScript 观察到的问题,您无法使用 JavaScript 解决它。 IMO 这是一个小细节,您可以决定等待 Opera 的修复,如果您对此不满意,“如果输入为空(或包含 JS 无法观察但当我们插入 0)" 方法时将被删除可能是最好的..
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
相关资源
最近更新 更多