2012-09-30 19 views
2

我正在尝试在Greasemonkey中编写一个脚本,该脚本将自动设置下拉列表的大小(可以有多个选项),但是使用我有限的JavaScript知识,真的知道如何做到这一点。主题如何自动设置下拉列表的大小?

举例:需要的输出的

<select name="z_pos_id"> 
<option value="2463">Option A</option> 
<option value="2609">Option B</option> 
<option value="3013">Option C</option> 
</select> 

<select name="z_pos_id"> 
<option value="140">Option AA</option> 
<option value="3038">Option AB</option> 
<option value="3519">Option AC</option> 
<option value="2645">Option AD</option> 
</select> 

例子:

<select size="3" name="z_pos_id"> 
<option value="2463">Option A</option> 
<option value="2609">Option B</option> 
<option value="3013">Option C</option> 
</select> 

<select size="4" name="z_pos_id"> 
<option value="140">Option AA</option> 
<option value="3038">Option AB</option> 
<option value="3519">Option AC</option> 
<option value="2645">Option AD</option> 
</select> 


所以,<select name="z_pos_id">应符合本替换:

<select size="*the number of options*" name="z_pos_id"> 

谢谢大家了帮帮我!

回答

1

这是一个完整的脚本。它应该是相当自我解释:

// ==UserScript== 
// @name  _Auto-size select selects. 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @grant none 
// ==/UserScript== 

var posIdSelects = document.querySelectorAll ("select[name=z_pos_id]"); 
for (var J = posIdSelects.length - 1; J >= 0; --J) { 
    var numOpts = posIdSelects[J].getElementsByTagName ("option").length; 
    posIdSelects[J].setAttribute ("size", numOpts); 
} 
+0

有没有一种方法,使这个循环? – mmmh

+0

是的,但是您必须精确地定义“循环”的含义。您是否在等待AJAX​​驱动的更改?用确切的细节打开一个新问题。 –

+0

有没有一种方法可以用doubleclick提交值?可能是 – mmmh

1
$(document).ready(function() { 
    var ln = $("select[name=z_pos_id] option").length ; 
    alert(ln); // you can delete this alert after your test 
     $("select[name=z_pos_id]").attr('size', ln); 
}); 
+0

没有提到jQuery;它可能不适用于这个问题。 –