下面的代码
<!DOCTYPE html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript" >
function makeid()
{
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < 64; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
function emptySelect(){
$("#test").empty();
}
$(function(){
for ( i=0; i< 1e4; i++){
$("#test").append("<option name='"+i+"'>"+makeid()+"</option>");
}
});
</script>
</head>
<body>
<select id="test"></select><hr/>
<input type="button" value="empty select" onclick="emptySelect()">
</body>
(或在此处检查代码:http://jsbin.com/bowasuneje/edit?html,output)
适用于 Chrome 版本 50.0.2661.102 m(64 位)(我假设是以前的版本)。
但是从 51.0.2704.79 m(最新版本)开始,代码不再有效。 Chrome 崩溃
此代码在一个选择中插入 10 000 个选项元素。单击按钮时,选择应该被清空。这使用 JQuery,但使用如下代码:
mySelect = document.getElementById("test");
while ( mySelect.firstChild ){
mySelect.removeChild( mySelect.firstChild );
}
也不行。
谁能重现这个问题?有什么好的解决方法吗?
谢谢,
本杰明
最佳答案
这很麻烦。在 Chrome 51.0.2704.79 m 中,只有 2,000 个选项元素时它就会崩溃。
如果您有那么多选项,选择元素可能不是最佳选择。但这不是 Chrome 崩溃的原因。
解决方法是在清空之前分离选择元素,然后将其添加回正文:
function emptySelect() {
$("#test")
.detach()
.empty()
.prependTo('body');
}
<!DOCTYPE html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript">
function makeid() {
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for (var i = 0; i < 64; i++)
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
function emptySelect() {
$("#test")
.detach()
.empty()
.prependTo('body');
}
$(function() {
for (i = 0; i < 1e4; i++) {
$("#test").append("<option name='" + i + "'>" + makeid() + "</option>");
}
});
</script>
</head>
<body>
<select id="test"></select>
<hr/>
<input type="button" value="empty select" onclick="emptySelect()">
</body>
关于javascript - Chrome v51.0.2704.79 上引入的错误 m 无法清空大选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37619590/