Iterating Over <select>使用jQuery + Multi Select </select>

时间:2009-01-13 10:25:43

标签: javascript jquery multi-select

这并不像人们想象的那么直截了当。我正在使用名为jQuery MultiSelect的插件和多个&lt; select&gt;使用XSLT的选项如下:

<xsl:for-each select="RootField">
  <select id="{RootField}" multiple="multiple" size="3">
    <option value=""></option>
    <xsl:for-each select="ChildField">
      <option value="{ChildField}"><xsl:value-of select="ChildField"/></option>
    </xsl:for-each>
  </select>
</xsl:for-each>

随附的JavaScript如下:

var selects = document.getElementsByTagName("select");

$.each(selects, function() {
  $(this).multiSelect();
});

这允许我应用multiSelect();功能到每一个&lt; select&gt;在页面上。

行为很奇怪,其他所有&lt; select&gt;正在被改为下拉列表(无论如何都是偶数)。我在JavaScript中看不到任何错误导致这个问题,因为它会迭代每一个问题。为了更清楚,只有那些应用了JavaScript的列表是位置2,4,6和8(页面中的9个)中的列表。

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

之前我没有听过“万圣节问题”标签,但罗伯特可能是正确的 从getElementsByTagName返回的节点列表是动态的,即添加或删除(在本例中为选择)将在创建节点列表后更改它。

//hoping for magic here
$('select').multiSelect();

$('select').each( function() {
    $(this).multiSelect();
});

答案 1 :(得分:2)

在multiSelect中听起来像万圣节问题(http://blogs.msdn.com/mikechampion/archive/2006/07/20/672208.aspx),但由于我不知道multiSelect,我无法肯定地说。

答案 2 :(得分:0)

试试这个:

jQuery('select').each(function(){selectAll(this.id)});