2017-03-07 44 views
0

我有多个选择框,一个在左边,另一个在右边。有添加和删除按钮,以便用户可以将项目从左侧框添加到右侧框,反之亦然从右侧框添加项目到左侧。 一切正常,但当我提交表单时,有两个框不提交。多个选择字段无法提交表单?

这是JavaScript:

<script language="Javascript"> 
function SelectMoveRows(SS1,SS2) 
{ 
    var SelID=''; 
    var SelText=''; 
    // Move rows from SS1 to SS2 from bottom to top 
    for (i=SS1.options.length - 1; i>=0; i--) 
    { 
     if (SS1.options[i].selected == true) 
     { 
      SelID=SS1.options[i].value; 
      SelText=SS1.options[i].text; 
      var newRow = new Option(SelText,SelID); 
      SS2.options[SS2.length]=newRow; 
      SS1.options[i]=null; 
     } 
    } 
    SelectSort(SS2); 
} 
function SelectSort(SelList) 
{ 
    var ID=''; 
    var Text=''; 
    for (x=0; x < SelList.length - 1; x++) 
    { 
     for (y=x + 1; y < SelList.length; y++) 
     { 
      if (SelList[x].text > SelList[y].text) 
      { 
       // Swap rows 
       ID=SelList[x].value; 
       Text=SelList[x].text; 
       SelList[x].value=SelList[y].value; 
       SelList[x].text=SelList[y].text; 
       SelList[y].value=ID; 
       SelList[y].text=Text; 
      } 
     } 
    } 
} 
</script> 

这是我的形式:

<form name="Example" method="post" action="someactionpage.cfm"> 
Use the ADD button to move columns that match with your excel file  
from the right pane to the left 

       <select name="Features" size="20" MULTIPLE> 
        <option value="MName">Middle Name</option> 
        <option value="Gender">Gender</option> 
        <option value="RaceCode">Race Code</option> 
        <option value="BirthDate">Birthdate</option> 
        <option value="HomeAddr1">Home Address 1</option> 
        <option value="HomeAddr2">Home Address 2</option> 
        <option value="HomeAddr3">Home Address 3</option> 
        <option value="HomeCity">Home City</option> 
        <option value="HomeState">Home State</option> 
        <option value="HomeZip">Home Zip</option> 
        <option value="HomeCountry">Home Country</option> 
        <option value="HomePhone">Home Telephone</option> 
        <option value="HomeFax">Home Fax</option> 
        <option value="HomeCell">Home Cell Phone</option> 
        <option value="HomeEmail">Home Email</option>   
       </select> 

       <input type="Button" value="Add >>" style="width:100px" 
     onClick="SelectMoveRows(document.Example.Features, 
     document.Example.FeatureCod 
     es)"> 
       <input type="Button" value="<< Remove"  
     style="width:100px" onClick="SelectMoveRows(document.Example. 
    FeatureCodes,document.Example.Features)"> 

       <select name="FeatureCodes" size="20" MULTIPLE> 
        <option value="LName">Last Name</option> 
        <option value="FName">First Name</option> 
       </select> 

<tr><td><input type="submit" name="SubmitColumn" value="NEXT"></td></tr> 
</table> 
</form> 

同样,这个代码工作得很好。物品移动并从右移到右移,反之亦然。问题是当我提交表单时,我没有得到这两个表单字段值。我没有看到form.Featuresform.FeatureCodes但我对actionpage

+1

那是什么是应该发生的。根据[HTML规范](https://www.w3.org/TR/html401/interact/forms.html#h-17.13.2):*“...当没有选项被选中时,控件不成功并且在提交表单时,名称和任何值都不会提交给服务器。“*如果您希望提交选择列表项,请将其标记为”selected“。 – Leigh

回答

1

由于@Leigh在他的评论中提到,我们需要在选择框中选择了form.SubmitColumn进行选择,这样,这些值将发送到服务器。我已经选择了多个选择框中的选项。所以现在它会提交表单提交这些值。

而且我注意到,SelectSort功能发生故障,所以我修改了代码如下,并使其工作。尝试下面的代码。希望它可以解决你的需求。

<script language="Javascript"> 
    function SelectMoveRows(SS1,SS2) 
    { 
     var SelID=''; 
     var SelText=''; 
     // Move rows from SS1 to SS2 from bottom to top 
     for (i=SS1.options.length - 1; i>=0; i--) 
     { 
      if (SS1.options[i].selected == true) 
      { 
       SelID=SS1.options[i].value; 
       SelText=SS1.options[i].text; 
       var newRow = new Option(SelText,SelID); 
       SS2.appendChild(newRow);    
       SS1.options[i]=null; 
      } 
     } 
    } 

    function selectall(form){ 

     var sel1 = form.Features.options; 
     var sel2 = form.FeatureCodes.options; 

     for (i=0;i<=sel1.length-1;i++){ 
      sel1[i].selected = true; 
     } 

     for (j=0;j<=sel2.length-1;j++){ 
      sel2[j].selected = true; 
     } 
    } 
</script> 

HTML:

<form name="Example" method="post" action="" onsubmit="javascript:selectall(this);"> 
Use the ADD button to move columns that match with your excel file  
from the right pane to the left 

       <select name="Features" size="20" MULTIPLE> 
        <option value="MName">Middle Name</option> 
        <option value="Gender">Gender</option> 
        <option value="RaceCode">Race Code</option> 
        <option value="BirthDate">Birthdate</option> 
        <option value="HomeAddr1">Home Address 1</option> 
        <option value="HomeAddr2">Home Address 2</option> 
        <option value="HomeAddr3">Home Address 3</option> 
        <option value="HomeCity">Home City</option> 
        <option value="HomeState">Home State</option> 
        <option value="HomeZip">Home Zip</option> 
        <option value="HomeCountry">Home Country</option> 
        <option value="HomePhone">Home Telephone</option> 
        <option value="HomeFax">Home Fax</option> 
        <option value="HomeCell">Home Cell Phone</option> 
        <option value="HomeEmail">Home Email</option>   
       </select> 

       <input type="Button" value="Add >>" style="width:100px" 
     onClick="SelectMoveRows(document.Example.Features,document.Example.FeatureCodes)"> 
       <input type="Button" value="<< Remove"  
     style="width:100px" onClick="SelectMoveRows(document.Example. 
    FeatureCodes,document.Example.Features)"> 

       <select name="FeatureCodes" size="20" MULTIPLE> 
        <option value="LName" >Last Name</option> 
        <option value="FName" >First Name</option> 
       </select> 

<tr><td><input type="submit" name="SubmitColumn" value="NEXT"></td></tr> 
</table> 
</form> 
+0

好地方。 @ user1557856 - 也可以考虑使用jQuery。这不是必需的,但有助于简化常见任务,如移动列表选项,选择所有选项等等。 – Leigh

+0

我们也可以使用jQuery插件这个选择过程,对于EGS:http://www.jqueryscript.net/demo/Lightweight-Multi-select-Combo-Box-Plugin-For-jQuery-SelectListActions/ –

+0

谢谢雷&感谢Rajesh的评论和脚本。它与你的脚本很好地合作。用户在提交表单之前不必突出显示这些项目。再次感谢你!我试图用jquery的建议,但它没有奏效。 – user1557856