[英]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);
循環不會遍歷整個列表,而是在21st或25th選項附近隨機中斷。 這就是為什么我在代碼中有一個強制循環
在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.