我想使用选择的jquery插件,就像他们在官方网站上使用的那个例子一样:http://harvesthq.github.io/chosen/
这些是我的文件:
这是index.html:
<html>
<body>
<head>
<script src="jquery-1.9.1.js"></script>
<script src="chosen.jquery.js"></script>
<link rel="stylesheet" href="chosen.css">
</head>
<body>
<script type="text/javascript">
$(".chosen-select").chosen()
</script>
<select class="chosen-select" tabindex="8" multiple="" style="width:350px;" data-placeholder="Your Favorite Types of Bear">
<option value=""></option>
<option>American Black Bear</option>
<option>Asiatic Black Bear</option>
<option>Brown Bear</option>
<option>Giant Panda</option>
<option selected="">Sloth Bear</option>
<option disabled="">Sun Bear</option>
<option selected="">Polar Bear</option>
<option disabled="">Spectacled Bear</option>
</select>
</body>
</body>
</html>
结果如下所示:
错了吗?我看到官方页面生成的html代码并不相同。当我将代码更改为此代码时:
<html>
<head>
<script src="jquery-1.9.1.js"></script>
<script src="chosen.jquery.js"></script>
<link rel="stylesheet" href="chosen.css">
<script type="text/javascript">
$(".chosen-select").chosen()
</script>
</head>
<body>
<select data-placeholder="Your Favorite Types of Bear" style="width:350px; display:none" multiple class="chosen-select" tabindex="-1">
<option value=""></option>
<option>American Black Bear</option>
<option>Asiatic Black Bear</option>
<option>Brown Bear</option>
<option>Giant Panda</option>
<option selected>Sloth Bear</option>
<option disabled>Sun Bear</option>
<option selected>Polar Bear</option>
<option disabled>Spectacled Bear</option>
</select>
<div class="chosen-container chosen-container-multi" style="width: 350px;" title="">
<ul class="chosen-choices">
<li class="search-field">
<input class="default" type="text" style="width: 183px;" autocomplete="off" value="Your Favorite Types of Bear" tabindex="8">
</li>
</ul>
<div class="chosen-drop">
<ul class="chosen-results">
<li class="active-result" data-option-array-index="1" style="">American Black Bear</li>
<li class="active-result" data-option-array-index="2" style="">Asiatic Black Bear</li>
<li class="active-result" data-option-array-index="3" style="">Brown Bear</li>
<li class="active-result" data-option-array-index="4" style="">Giant Panda</li>
<li class="active-result" data-option-array-index="5" style="">Sloth Bear</li>
<li class="disabled-result" data-option-array-index="6" style="">Sun Bear</li>
<li class="active-result" data-option-array-index="7" style="">Polar Bear</li>
<li class="disabled-result" data-option-array-index="8" style="">Spectacled Bear</li>
</ul>
</div>
</div>
</body>
</html>
我明白了:
我是否需要做其他事情以获得官方示例的相同结果?
答案 0 :(得分:7)
此代码不起作用的原因是它出现在源顺序中的select元素之前 - 因此当脚本运行时,DOM(文档对象模型)中没有匹配的元素来应用所选的插件方法。
许多开发人员现在将他们的脚本放在页面底部 - 就在关闭body元素标记之前 - 这有助于确保您希望与之交互的元素在DOM中,并提高浏览器的性能当它到达脚本时,将停止加载DOM或任何其他资产(这些资源通常并行/同时加载),仅在执行时才恢复。这主要是出于遗留原因,开发人员会使用document.write动态地向页面添加内容 - 期望这个内容应该出现在脚本所在的位置,而不是在写入语句时浏览器碰巧构建DOM的位置。调用。
我会改变你的第一个例子如下 -
<!doctype html>
<html>
<body>
<head>
<title>Add a title</title>
<link rel="stylesheet" href="chosen.css">
</head>
<body>
<select class="chosen-select" tabindex="8" multiple style="width:350px;" data-placeholder="Your Favorite Types of Bear">
<option value=""></option>
<option>American Black Bear</option>
<option>Asiatic Black Bear</option>
<option>Brown Bear</option>
<option>Giant Panda</option>
<option selected>Sloth Bear</option>
<option disabled>Sun Bear</option>
<option>Polar Bear</option>
<option disabled>Spectacled Bear</option>
</select>
<script src="jquery-1.9.1.js"></script>
<script src="chosen.jquery.js"></script>
<script>
$(document).ready(function() {
$(".chosen-select").chosen();
});
</script>
</body>
</html>
这有两种方式。首先,脚本的放置位于页面的末尾,因此select元素在运行时应该已经在DOM中。其次,文档就绪事件处理程序保证我们创建的匿名函数在浏览器完全加载/构建DOM之前不会运行。代码在函数中,否则它将由浏览器立即执行(并且由于ready方法期望函数作为参数,因此会出现语法错误)。文档就绪事件(在现代浏览器中称为DOMContentLoaded)优于window.onload,因为它在窗口加载事件之前触发,可能是在浏览器仍在加载页面所需的图像或其他大型资产时。这意味着在用户开始与其进行交互后,您的页面不太可能突然发生变化。
其他一些观点 -
有关详情,请参阅http://learn.jquery.com/using-jquery-core/document-ready/
答案 1 :(得分:6)