【问题标题】:Error when attempting to dynamically change Select2尝试动态更改 Select2 时出错
【发布时间】:2017-03-03 21:45:22
【问题描述】:

我正在开发一个 ASP.NET MVC Web 项目。由于其简洁且吸引人的功能,我目前在我的项目中将 select2 用于多个下拉菜单。我对select2也有一些问题。我想在创建页面上创建一个下拉列表,当另一个下拉值更改时“更改”状态。 Select2 有一个下拉菜单,既可以从下拉菜单结果中进行选择,也可以输入您自己的条目并保存。 (参见https://select2.github.io/examples.html 上的标记部分)。我需要能够通过 javascript AFTER 页面加载动态打开/关闭标签。似乎 select2 只会初始化下拉菜单,之后就不允许动态更改。

查看用于在页面加载时初始化 select2 的 Html 和 Javascript 代码:

 <div class="col-md-8">
   @Html.ListBoxFor(model => model.modelNum, Model.modelNumList, new { @class= "js-tags" })
 </div>

<script type="text/javascript">    

        $(".js-tags").select2({
            placeholder: "Enter Model",
            tags: true,
            maximumSelectionLength: 1
        })

</script>

以上部分效果很好。 Select2 已初始化,并遵循我的设置。在此之后,我的计划是更改 select2 的设置以销毁并重新初始化实例,因此编辑下拉菜单并关闭标签。当另一个下拉列表更改时,将调用以下 javascript 方法。

代码:

 <script type="text/javascript" language="javascript">
   function ChangeModelNum(_classID)
   {
       if(_classID == 1)
       {
           $(".js-tags").select2("destroy").select2({
               placeholder: "Select Model",

               tags: false,
               maximumSelectionLength: 1
           })             
       }
       else
       {
           $(".js-tags").select2({
               placeholder: "Enter Model",
               tags: true,
               maximumSelectionLength: 1
           })
       }
   }

如您所见,如果用户选择 classID 为 1,我想禁用下拉列表的标记。但这根本行不通。我在开发者工具中也遇到了这个错误:

JavaScript 运行时错误:对象不支持属性或方法“select2”

我已经确保没有双 jquery 引用。完美使用 Select2 后为什么会出现错误,这是没有道理的。

补充:

这里是触发 ChangeModelNum 的代码:

 <div class="col-md-2">
                @Html.DropDownListFor(model => model.classnum, Model.classL, "Select Class", new { @onchange = "javascript:ChangeModelNum(this.value);", @class = "form-control" })

            </div>

感谢您的帮助!

【问题讨论】:

    标签: javascript asp.net-mvc select2


    【解决方案1】:

    我不确定,但我认为这个特定错误可能是由方法链接引起的

    $(".js-tags").select2("destroy").select2... 
    

    尝试将其拆分为两个单独的调用:

    $(".js-tags").select2("destroy");
    $(".js-tags").select2({
                   placeholder: "Select Model",
                   tags: false,
                   maximumSelectionLength: 1
               })       
    

    【讨论】:

    • 你能显示触发ChangeModelNum的代码吗?什么时候绑定这个来改变事件?难道是在select2初始化之前就触发了ChangeModelNum?
    • 而不是 @onchange = "javascript:ChangeModelNum(this.value);" 分配一个 id 到这个下拉列表并订阅文档准备好的事件:$(document).ready(function(){$("#dropDownId").change(function(){ ChangeModelNum($(this).val()) })})
    • 这段代码给了我语法错误,关于括号之一。我没有使用 javascript 的经验,所以我无法实现这一点,并且无法修复错误
    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 2013-11-30
    • 2012-10-27
    • 2017-11-01
    • 2018-06-19
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多