2010-10-05 210 views
0

我有一个主要的选择“主要”,以及从2到9的列表,取决于情况,更多的选择。 如果我想要更改所有这些二级选择中的值,那么使用与主选择相同的值会怎么样?所以主要选择将改变1个多选择在同一时间: 所以,我已经得到了主要的选择:选择下拉列表html

<select name="main" id="main" onchange="document.getElementById('item').value = document.getElementById('main').value"> 
    <option value = p>Please Select</option> 
    <option value = b>BOOK</option> 
    <option value = d>DVD</option> 
</select> 

而接下来的选择是在一个循环中的PHP做的,所以我将有2个, 3,4,5,...,9根据情况选择。他们中的每一个不同的名字(因为我使用POST这个名字)

<select name=item_".$itemnumber." id="item"> 
<option value = p>Please Select</option> 
<option value = b>BOOK</option> 
<option value = d>DVD</option> 
</select> 

有了这个,我想有一个时间来选择对所有选择该选项的可能性,但维持的可能性只有改变一些选择。

回答

0

我没有看到任何问号。

我看到的唯一问题是您应该使用.selectedIndex而不是.value

jQuery的解决方案:

$(".selectorClass").each(function(index, selectorToUpdate){ 
    selectorToUpdate.selectedIndex = $('#main').selectedIndex; 
}); 

将这个在功能和要求的onchange这个函数。

+0

如果我这样做的价值或selectedIndex是相同的。我只更改id = item的第一个选择,但不是下一个。 – pepersview 2010-10-05 07:39:46

+0

给他们所有的同一班,不是ID!然后循环getElementsByTagName('select')并检查是否添加了className,或者更容易使用jQuery或protortype,以便可以使用类选择器和每个函数。如果你不使用JavaScript框架,你应该考虑使用一个。 – 2010-10-05 07:47:48

+0

另外,在选择的DOM元素上没有值属性。有些浏览器选择实现它,但不应该依赖它。 – 2010-10-05 07:51:26

0

我的理解是,您有一个<select>下拉列表,并且在更改此文本中的文本时,您希望更改屏幕上一个或多个其他下拉列表中的选择内容。我对吗?

如果是这样的话,那么你必须有一个javascript函数,并在<select>onchange中调用此函数。
在此javascript函数中,您必须设置所需的所有下拉列表的所选值。

如果这不是你想要的,你能否重新解释你的问题,告诉我们你到底想要什么?

编辑

  function setElement() 
     { 
       var selectedValue = document.getElementById("main").value; 
       selectThisValue(document.getElementById("child1"), selectedValue); 
       selectThisValue (document.getElementById("child2"), selectedValue); 
     } 

     function selectThisValue(selectElement, val) 
     { 
      for (var i = 0; i < selectElement.options.length; i++) 
      { 
       if (selectElement.options[i].value == val) 
       { 
       selectElement.options[i].selected = true; 
       return; 
       } 
      } 
     } 

在你的主要的平变化呼叫setElement()。该功能从主要<select>中获取所选项目,并选择其他下拉菜单中具有相同值的项目。
您需要为每个需要更改的选项调用selectThisValue函数一次。
根据您的代码更改ID。

+0

是的,这就是我想要的。你是对的。但我的问题是做这个功能。我如何设置一个选择的价值(如果我现在不知道我有多少)?我尝试通过给所有人的相同ID ... – pepersview 2010-10-05 07:43:37

0

我做这工作就像是:

function changeValue(theElement) { 
    var theForm = theElement.form, z = 0; 
    for(z=0; z<theForm.length;z++){ 
     if(theForm[z].id == 'item' && theForm[z].id != 'main'){ 
      theForm[z].selectedIndex = theElement.selectedIndex; 
     } 
    } 
} 

但我不知道如果那是最好的办法,我听说这里的jQuery会更容易些,所以我想知道如何使它在jQuery中,请。

0

永远不要在所有选择元素中放入相同的ID ... ID应该是页面元素唯一的。 改变你的HTML看起来像

<select id="main" class="master">....</select> 
<select id="test1" class="child">....</select> 
<select id="test2" class="child">....</select> 
<select id="test3" class="child">....</select> 
<select id="test4" class="child">....</select> 

类属性的多个元素可以是相同的。

你的功能需要修改,看起来像这样 (我还没有测试这一点,但应该工作。)

function changeValue(theElement) { 
    var theForm = theElement.form, z = 0; 
    for(z=0; z<theForm.length;z++){ 
     if(theForm[z].className == 'child'){ 
      theForm[z].selectedIndex = theElement.selectedIndex; 
     } 
    } 
} 

顺便说一下,里面做的选项,这些选择框有什么不同?如果是的话,你必须通过值而不是指数匹配

编辑:这是我后来写的代码..修改,以适合您的需要

<html> 
<head><title>select change cascade</title></head> 
<body> 
<select id="main" class="master"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test1" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test2" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test3" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<select id="test4" class="child"><option value="1">book</option><option value="2">cd</option></select> 
<script type="text/javascript" src="./selectchange.js"></script> 
</body> 
</html> 

和selectChange.js

var main = document.getElementById("main"); 
main.onchange = function(){ 
    sels = document.getElementsByTagName("select"); 
    for(z=0; z<sels.length;z++){ 
     if(sels[z].className == 'child'){ 
      sels[z].selectedIndex = this.selectedIndex; 
     } 
    } 
} 
+0

如果选项不同,尼瓦斯的代码是正确的.. – 2010-10-05 08:23:07

+0

在主人和孩子中的选项总是相同的 – pepersview 2010-10-05 08:30:55

+0

我试图使用它类,因为它看起来合乎逻辑,但我不能让它工作。 – pepersview 2010-10-05 08:51:28