我在Opera和Safari上遇到HTML5验证问题。
在Opera中,消息气泡不显示任何文本,而在safari中,按下提交按钮时不会进行验证。在IE,Mozilla或Chrome中,验证工作正常。谁能说出为什么会发生这种情况?
我在表单中的输入具有html5标准验证,具有必需属性,就是这样。
我尝试在网络上搜索此主题,但无法找到它。
请帮帮我。
由于
<form class="sign-in-form" action="" method="post">
<li>
<label>
<span>Username</span>
<input placeholder="Please enter your username" name="username" type="text" tabindex="1" title="It must contain the username that you have chosen at registration" required autofocus>
</label>
</li>
<li>
<label>
<span>Password</span>
<input placeholder="Please enter your password" name="password" type="password" tabindex="2" title="It must contain the password that you have chosen at registration" required>
</label>
</li>
<li>
<button name="sign-in-btn" type="submit" id="sign-in-submit">Sign In</button>
</li>
</form>
答案 0 :(得分:8)
这是Opera中一个奇怪的错误:使用@ font-face网络字体时不会显示该消息。我也遇到过这个问题。选择像Arial这样的普通字体,会显示消息。 Safari不支持html5验证(safari有部分支持,但没有验证泡泡)。我的提示是:使用webshims lib(http://afarkas.github.io/webshim/demos/) - 很好的polyfill用于许多功能,如验证。
答案 1 :(得分:1)
我遇到了同样的问题并以这种方式解决了它
<script>
(function() {
var loadScript = function(src, loadCallback) {
var s = document.createElement('script');
s.type = 'text/javascript';
s.src = src;
s.onload = loadCallback;
document.body.appendChild(s);
};
// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser
var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
if (isSafari || isOpera) {
loadScript('//code.jquery.com/jquery-2.1.4.min.js', function () {
loadScript('//cdnjs.cloudflare.com/ajax/libs/webshim/1.15.10/dev/polyfiller.js', function () {
webshims.setOptions('forms', {
overrideMessages: true,
replaceValidationUI: false
});
webshims.setOptions({
waitReady: true
});
webshims.polyfill();
});
});
}
})();
</script>
只需在页面末尾添加此剪辑即可。如果您已经导入了它,可以删除load jQuery步骤!
答案 2 :(得分:0)
您可以添加以下内容(附图像): http://i.stack.imgur.com/sMe9Z.png
<style type="text/css">
input.invalid, select.invalid, textarea.invalid {
border-color: #ff0000;
background-image: url('../img/required.png');
background-position: right top;
background-repeat: no-repeat;
-moz-box-shadow: none;
}
input:required:valid, textarea:required:valid, select:required:valid {
border: 1px solid #cccccc;
background-image: none;
}
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
</style>
<form action="" method="get" accept-charset="utf-8">
<input type="text" name="name" required>
</form>
<script type="text/javascript">
// Force Validation
function html5Validation () {
//Check if validation supported && not safari
return (typeof document.createElement('input').checkValidity === 'function') &&
!(navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0);
}
$('form').submit(function(){
if(!html5Validation())
{
var isValid = true;
var $inputs = $(this).find('[required]');
$inputs.each(function(){
var $input = $(this);
$input.removeClass('invalid');
if(!$.trim($input.val()).length)
{
isValid = false;
$input.addClass('invalid');
}
});
if(!isValid)
{
return false;
}
}
});
</script>