【问题标题】:How to delete disabled options in a drop-down HTML select list in Drupal 7如何在 Drupal 7 的下拉 HTML 选择列表中删除禁用的选项
【发布时间】:2014-10-22 13:22:28
【问题描述】:

我想遍历一个元素,从列表中删除所有禁用的元素,以便只向用户呈现与他们相关的项目。所有这一切都发生在 Drupal 7 中,选择列表是从分类术语列表中填充的。我注意到两个问题,但首先这是我在自定义主题中的 javascript 文件:

(function($) 
{
    Drupal.behaviors.mytheme = 
    {
        attach: function(context, settings) 
        {
            var x = document.getElementById("edit-field-diplomatic-mission-und");

            for (var j = 0; j < 10; j++) //Force loop
            {
                for (var i = 0; i < x.length; i++)
                {
                    if (x.options[i].disabled == true)
                    {
                        x.remove(i);
                    }
                }
            }
        }
    };
})(jQuery);
  1. 循环不会遍历整个列表,而是在第 21 个或第 25 个选项附近随机中断。这就是为什么我在代码中有一个强制循环

  2. 禁用的元素在 Drupal 中根本不会被删除

就像一个注释,在它自己的独立格式上,相同的代码可以在整个列表中删除元素,没有循环:

    <script>
        $(document).ready(function ()
        {
            var x = document.getElementById("edit-field-diplomatic-mission-und");

            for (var j = 0; j < 10; j++)
            {
                for (var i = 0; i < x.length; i++)
                {
                    if (x.options[i].disabled == true)
                    {
                        x.remove(i);
                    }
                }
            }
        });
    </script>

请问我做错了什么?

【问题讨论】:

  • 如果使用 Jquery:$('select option:disabled').remove()
  • 我不确定您是否需要这样做。为什么你需要删除或删除禁用的选项?我的理解是你有一个显示给用户的列表,你不希望显示一些值。请详细说明

标签: javascript jquery drupal drupal-7


【解决方案1】:

问题是您正在删除影响options 集合长度(即实时NodeList)的选项。您可以向后循环。这是删除所有禁用选项的正确代码:

var x = document.getElementById("edit-field-diplomatic-mission-und");

for (var i = x.options.length - 1; i >= 0; i--) {
    if (x.options[i].disabled) {
        x.remove(i);
    }
}

var i = x.options.length;
while (i--) {
    if (x.options[i].disabled) {
        x.remove(i);
    }
}

一般x.length 没有意义,因为x 是单个 DOMElement 而不是集合。

最后,既然您使用的是 jQuery,那么您绝对应该使用它:

$('#edit-field-diplomatic-mission-und option:disabled').remove();

【讨论】:

  • $('#edit-field-diplomatic-mission-und option:disabled').remove(); 听起来最体面,但它不起作用。其他循环也没有。
  • for (var i = x.options.length - 1; i &gt;= 0; i--) 循环遍历整个选项列表 OK。而且,是的,当 DOM 准备好时,我正在运行脚本。
  • 我什至尝试过x.options[i].getAttribute("disabled") 但返回null
  • 发布一个有问题的演示。包括您正在处理的 HTML。
猜你喜欢
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
相关资源
最近更新 更多