簡體   English   中英

如何在Drupal 7的下拉HTML選擇列表中刪除禁用的選項

[英]How to delete disabled options in a drop-down HTML select list in Drupal 7

我想遍歷一個元素,從列表中刪除所有禁用的元素,以便僅向用戶顯示與他們相關的項目。 所有這些都在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. 循環不會遍歷整個列表,而是在21st或25th選項附近隨機中斷。 這就是為什么我在代碼中有一個強制循環

  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>

請問我做錯了什么?

問題是您要刪除影響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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM