jquery - Chrome 不显示由 jQuery 或直接 CSS 属性设置的类

标签 jquery css html google-chrome

这似乎有点像设计/CSS 问题,但我确实需要一些帮助。

这是页面http://library.permilia.com/Gavin/version2.0_beta/lead.html

它适用于除 chrome 之外的所有可以想象的浏览器。

它的工作原理是指它应用了一个 .error 类,将边框设置为 1px solid #f00,这是一个红色边框。由于某种原因,在 chrome 中你无论如何都不能改变它!

有人有什么想法吗?

最佳答案

所以...,答案是您的 JS 代码都不会触发,因为 Chrome 正在实现 HTML5 输入元素,包括表单验证。因此,除非您正确填写字段,否则您的验证代码永远不会触发!

在 HTML5 中,required 属性是一个 bool 值,它可以是 true 或 false。根据the spec ,浏览器应该在问题字段上触发一个 invalid 事件。如果需要,您可以在此时取消默认的阻止行为。但是,您的脚本在您尝试 attr('required') 的地方再次崩溃。它会在 Chrome 中使用 HTML5 返回 truefalse,而不是您期望的 email 之类的值。

所以如果你想让它工作,你需要添加这两个部分:

$(":input").bind("invalid", function(e){
   e.preventDefault(); // Don't block the form submit
});

然后重构你的代码

var a = $(this).attr('required');

成为

var a = $(this).attr('required') ? $(this).attr('type') : "";

并根据需要更改您的 switch 语句以匹配

最后一个想法:您也可以采用一种非常酷的方法(也称为特征检测),而是这样做:

用这个包装你当前的 validate: 函数的内部:

if(typeof $('<input />')[0].checkValidity === "undefined") {
  ... existing code ..
} else {
  $(':input').bind('invalid', function(){
     $(this).addClass('error');
  }).blur(function(){
     // If valid, turn off error
     // If invalid, turn on error
     $(this).toggleClass('error', !this.checkValidity());
  });
}

Here is a demo第二个版本将在 Chrome 中运行,并且可能是 Opera 的当前/测试版。

关于jquery - Chrome 不显示由 jQuery 或直接 CSS 属性设置的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2838355/

相关文章:

javascript - 使用 Javascript 的返回页首按钮故障

jquery - 如何使用 jquery 设置两个 div 的百分比宽度动画

jquery - 如何使用 jquery 将删除图像/图标附加到 div 内的图像

jquery - 使用 jquery 更改背景图像

html - CSS 淡入淡出图像

javascript - 动态插入/删除表行(包括如何为添加的行提供 ID)

html - 我想实现从 nowrap 到 normal 的平滑过渡

jquery - 如何让 jQuery 在图像褪色之前添加占位符?

php - WooCommerce:隐藏付款按钮,直到选择发货

javascript - Moment.js 只能使用一次