选择jquery插件基本ui不起作用

时间:2013-12-28 05:14:06

标签: javascript jquery html jquery-chosen

我想使用选择的jquery插件,就像他们在官方网站上使用的那个例子一样:http://harvesthq.github.io/chosen/

enter image description here

这些是我的文件:

enter image description here

这是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>

结果如下所示:

enter image description here

错了吗?我看到官方页面生成的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>

我明白了:

enter image description here

我是否需要做其他事情以获得官方示例的相同结果?

2 个答案:

答案 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,因为它在窗口加载事件之前触发,可能是在浏览器仍在加载页面所需的图像或其他大型资产时。这意味着在用户开始与其进行交互后,您的页面不太可能突然发生变化。

其他一些观点 -

  • 您的文档中肯定需要doctype
  • 尝试始终在脚本之前放置样式表
  • 您有两个关闭的body元素标记
  • 只能选择一个选择选项 - 在任何时候都有所选属性。
  • 属性multiple,selected和disabled是布尔属性,不需要值(你可以删除=“”)

有关详情,请参阅http://learn.jquery.com/using-jquery-core/document-ready/

答案 1 :(得分:6)

index.html

中试试
$(window).load(function(){
$(".chosen-select").chosen()
});

DEMO