Javascript 多个和单个选择/组合框的逻辑

Javascript 多个和单个选择/组合框的逻辑,javascript,html,jsp,dom-events,Javascript,Html,Jsp,Dom Events,下面是我的代码: <%@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

下面是我的代码:

<%@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>

var标志=假;
功能测试(selObject)
{
警报(“hi”);
var form=document.forms[0];
警报(“表格”+表格);
var txtS=表格[“城市];
警报(“txt”+txtS);
var len=txtS.length;
警报(“len”+len);

对于(var i=0;i,请使用类似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

函数onload(){var form=document.forms[0];var formObj=form[“city”];var len=formObj.length;var cityvalue=formObj.value;if(cityvalue==“B”){flag=true;}以上是调用页面加载的函数。当有单个选择元素时,该函数可以正常工作,但单个选择元素的长度显示为3。对于单个选择元素,该函数可以正常工作。但是对于多个选择元素,我该怎么做?或者如果有3个选择元素,该函数会导致歧义。有人能帮我吗?@cxyz无法进行修改吗使用不同名称或至少不同ID的元素?在元素之间添加一些区分因子将非常有帮助。现在,我认为您可以使用
if(formObj.options[0]){//multi-select}else{//single-select}来测试formObj是节点列表还是元素对象
。另外,如果您可以在w3schools.com或@cxyz上阅读一些DOM教程,这将是一件好事。最好使用像jQuery这样的javascript库,因为原始javascript代码可能无法在某些浏览器上运行。如果您正在编写原始javascript,请在至少3种主要浏览器上测试您的代码