Javascript 自动完成不适用于IE11和Safari浏览器
各位晚上好。我正在实现下面的源代码中的autocomplete函数。但当我把它应用到IE11上时,它不起作用,当用户输入时它不会自动完成,而只在我们点击输入时起作用。我去寻找原因,但仍然找不到,希望大家能帮助我。非常感谢Javascript 自动完成不适用于IE11和Safari浏览器,javascript,jquery,safari,autocomplete,internet-explorer-11,Javascript,Jquery,Safari,Autocomplete,Internet Explorer 11,各位晚上好。我正在实现下面的源代码中的autocomplete函数。但当我把它应用到IE11上时,它不起作用,当用户输入时它不会自动完成,而只在我们点击输入时起作用。我去寻找原因,但仍然找不到,希望大家能帮助我。非常感谢 <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&qu
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<style>
body {
font-family: 'Source Sans Pro', sans-serif;
font-size: large;
max-width: 500px;
margin: 0 auto;
}
input[type=email] {
font-size: large;
width: 400px;
-webkit-appearance: none;
appearance: none;
}
input::-webkit-calendar-picker-indicator {
display: none;
}
label {
display: block;
font-size: small;
text-transform: uppercase;
letter-spacing: 2px;
color: #999;
}
</style>
</head>
<body>
<label for="email">Email</label>
<input id="email" name="email" type="email" placeholder="your@email.com">
<script>
const EmailDomainSuggester = {
domains: ["yahoo.com", "gmail.com", "google.com"],
bindTo: $('#email'),
init: function () {
this.addElements();
this.bindEvents();
},
addElements: function () {
// Create empty datalist
this.datalist = $("<datalist />", {
id: 'email-options'
}).insertAfter(this.bindTo);
// Corelate to input
this.bindTo.attr("list", "email-options");
this.bindTo.attr("autocomplete", "off");
},
bindEvents: function () {
this.bindTo.on("keyup", this.testValue);
},
testValue: function (event) {
let el = $(this),
value = el.val();
// email has @
// remove != -1 to open earlier
if (value.indexOf("@") != -1) {
value = value.split("@")[0];
EmailDomainSuggester.addDatalist(value);
} else {
// empty list
EmailDomainSuggester.datalist.empty();
}
},
addDatalist: function (value) {
let i, newOptionsString = "";
for (i = 0; i < this.domains.length; i++) {
newOptionsString += "<option value='" + value + "@" + this.domains[i] + "'>";
}
// add new ones
this.datalist.html(newOptionsString);
}
}
EmailDomainSuggester.init();
</script>
</body>
</html>
身体{
字体系列:“源Sans-Pro”,无衬线;
字体大小:大号;
最大宽度:500px;
保证金:0自动;
}
输入[类型=电子邮件]{
字体大小:大号;
宽度:400px;
-webkit外观:无;
外观:无;
}
输入::-webkit日历选择器指示器{
显示:无;
}
标签{
显示:块;
字体大小:小;
文本转换:大写;
字母间距:2px;
颜色:#999;
}
电子邮件
const EmailDomainSuggester={
域名:[“yahoo.com”、“gmail.com”、“google.com”],
bindTo:$(“#电子邮件”),
init:函数(){
这个。加法器();
这是bindEvents();
},
加法器:函数(){
//创建空数据列表
this.datalist=$(“”{
id:“电子邮件选项”
}).insertAfter(this.bindTo);
//Corelate输入
this.bindTo.attr(“列表”、“电子邮件选项”);
this.bindTo.attr(“自动完成”、“关闭”);
},
bindEvents:函数(){
this.bindTo.on(“keyup”,this.testValue);
},
testValue:函数(事件){
设el=$(此),
value=el.val();
//电子邮件@
//删除!=-1以较早打开
if(value.indexOf(“@”)!=-1){
value=value.split(“@”)[0];
EmailDomainSuggester.addDatalist(值);
}否则{
//空列表
EmailDomainSuggester.datalist.empty();
}
},
addDatalist:函数(值){
让我,newoptionString=“”;
对于(i=0;i
我可以看出您只发布了JQuery代码。只有这段代码,我们无法测试IE和其他浏览器的问题。我建议尝试提供适当的HTML和JS示例,我们可以在IE浏览器中运行这些示例来检查问题。除此之外,您是否在控制台中看到任何错误或警告消息?此代码在其他浏览器中正常工作吗?抱歉,我将更新状态。我没有收到任何错误消息。为了更清楚,您可以参考此视频。我尝试测试此问题,但IE浏览器的工作方式似乎略有不同。在我的测试中,我注意到用户不需要单击文本框,如果用户继续键入文本,IE将显示该选项。只是在添加“@”后,它不会立即显示选项。