可以在移动Safari中使用javascript关闭autocapitalize吗?

时间:2009-07-17 22:01:09

标签: javascript iphone html5 mobile-safari

Mobile safari支持名为autocapitalize的输入元素的属性 [documented here],设置为“关闭”时会停止iPhone将文本输入大写到该字段中,这对于网址或电子邮件字段非常有用。

<input type="text" class="email" autocapitalize="off" />

但是这个属性在html 5(或者据我所知的其他规范)中无效,所以将它包含在html中会产生一个无效的html页面,我想做的是能够将这个属性添加到特定的字段onload with javascript with this:

$(document).ready(function(){
  jQuery('input.email, input.url').attr('autocapitalize', 'off');
});

在firefox和桌面游戏中添加了正确的属性,但似乎没有在移动游猎中做任何事情,任何想法为什么?

5 个答案:

答案 0 :(得分:8)

这应该在iPhone OS 3.0中修复。您正在尝试使用哪个版本的iPhone OS?

Email: <input id="email" type="text"><br>
URL: <input id="url" type="text"><br>
<script>
//document.getElementById("email").autocapitalize = 'off';
//document.getElementById("url").autocapitalize = 'on';
document.getElementById("email").setAttribute('autocapitalize', 'off');
document.getElementById("url").setAttribute('autocapitalize', 'on');
alert(document.body.innerHTML);
</script>

答案 1 :(得分:8)

旁注。您可以通过将输入的类型指定为“电子邮件”来自动调出“电子邮件”键盘(用于键入电子邮件的字符稍微好一点),从而进一步改善iOS上的用户体验。

<input type="email" class="email" autocapitalize="off" />

Here is some documentation关于输入类型如何控制iOS键盘。

答案 2 :(得分:4)

如果您通过脚本添加它或者将其添加到标记中,它同样无效。只是如果你通过脚本添加它,验证器就无法注意到它。

只需将其放入标记并在其旁边添加注释,如<!-- the "autocapitalize" attribute is an Apple proprietary extension for the iPhone to change its IME behaviour -->,那样查看验证器中代码的人就会知道是什么了。

答案 3 :(得分:1)

如果它是一个有用的功能,您只需要在严格验证和用户体验之间进行选择。就个人而言,我会在任何一天选择用户体验。

答案 4 :(得分:0)

所以我无法让jQuery去做,但是普通的旧javascript,正如ddkilzer建议的那样,所以我把这个函数放在一起,将autocapitalize ='off'选项应用于具有特定类的所有输入:

$(document).ready(function(){
  // disable autocapitalize on .url, .email fields
  unautocapitalize('url');
  unautocapitalize('email');
});

function unautocapitalize(cssClass){
  var elems = document.getElementsByClassName(cssClass);
  for (var j = 0; j < elems.length; j++){
    elems[j].setAttribute('autocapitalize', 'off');
  }
}