2012-07-30 125 views
0

下面是我的代码逻辑的多单选择/组合框

<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> 
<%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> 

<script type="text/javascript"> 
var flag = false; 
function test(selObject) 
{ 
    alert("hi"); 

    var form = document.forms[0]; 
    alert("form"+form); 

    var txtS = form["city"]; 
    alert("txt"+txtS); 

    var len = txtS.length; 
    alert("len"+len); 

    for(var i=0; i<len; i++) 
    { 
     if (selObject == txtS[i]) 
     { 
      if(txtS[i].value==txtS[i].options[3].value) 
      { 
       alert("YOU ARE SELECTING MYSORE CITY"); 
       flag = true; 
      } 

      if(!txtS[i].options[3].selected && flag) 
      { 
       var result = confirm("Are you sure you wnat to travel to this city"); 
       if(result) 
       { 
        flag = false; 
       } 
       else 
       { 
        txtS[i].options[txtS[i].options.selectedIndex].selected=false; 
        txtS[i].options[4].selected=true; 
       } 
      } 
     } 
    }//end of for loop 
} 
</script> 

<html:form action="/login"> 
    username:<input type="text" name="username" /></br> 
    password:<input type="password" name="password"/></br> 

    <% 
    for(int i = 0; i < 10; i++){ 
    %> 
     <html:select property="city" onchange="javascript:test(this);"> 
      <html:option value="B">BANGALORE</html:option> 
      <html:option value="C">CHENNAI</html:option> 
      <html:option value="M">MANGALORE</html:option> 
      <html:option value="MR">MYSORE</html:option> 
     </html:select></br> 
    <% 
    } 
    %> 
    <input type="submit" value="submit"/> 
</html:form> 

当选择框或组合框被循环十次,然后我得到form["city"]长度为10妥善和内alerts行为combox-box是合适的,但是如果我有一个单选框,则不会给form["city"]长度为1,而会将其作为4这是我的下拉框中的option元素的数量。

所以我的逻辑在这里不起作用。

如何使它适用于单个以及多个组合/选择框。

在此先感谢。任何帮助,将不胜感激。

回答

0

请使用像jQuery这样的JavaScript库来实现跨浏览器兼容性。

可以使用以下代码来确定只有单个选择元件是具有相同名称的存在或多个选择元素存在:

if (selObject == txtS) { 
    alert("Single select"); 
    // ... your logic for a single combo-box follows after this 
} else { 
    // your logic for multiple combo-box follows, like the "for" loop and if-else 
} 

当仅存在一个选择框的线var txtS = form["city"];将返回该选择框内的一个选项元素数组,当多个具有相同名称的选择框时,它返回一个选择框数组。

希望这会有所帮助。

与您的问题无关,但此逻辑if(!txtS[i].options[3].selected && flag)将始终返回false

+0

感谢lot.That工作 – cxyz 2012-07-30 11:37:54

+0

函数的onload() { \t变种形式= document.forms [0]; \t var formObj = form [“city”]; \t var len = formObj.length; \t var cityvalue = formObj.value; \t if(cityvalue ==“B”) \t { \t \t flag = true; \t} } – cxyz 2012-07-31 10:00:48

+0

以上是调用页面的onload函数,当单选元素有效时,可以正常工作,但单选元素的长度显示为3. behvaiour对于单选元素很好。为多个选择元素做?或者如果有3个选择元素,它会导致模糊不清。任何人都可以帮助我? – cxyz 2012-07-31 10:03:01