0

我有一个非常关键的问题。

下面是我的jsp代码:

<html:select property="city"   name="city"  onchange="javascript:checkCity(this);">                             
                        <html:option value="N">NewYork</html:option>                      
                        <html:option value="F">France</html:option>
                        <html:option value="I">Italy</html:option>
                        <html:option value="P">Paris</html:option>
</html:select>

<html:select>由于 my被放置在 for 循环中,因此可以有单个或多个 html 选择。

下面是我的 Javascript 代码:

var citySelected = new Array();
function checkCity(selObject)
{
     var form = document.forms[0];
     var cityObj =  form["city"];
     var len = cityObj.length;
     if(selObject==cityObj)      // if there is single <html:select> selObject is same as city Object.so this logic works fine
     {
        if(cityObj.value==cityObj.options[3].value)
        {
        alert("You have selected Paris City");
        citySelected[0] = true;
        }
        if(!cityObj.options[3].selected && cityObj[0])
        {
        var result = confirm("You have selected cities other than paris");
        if(result)
        {
            citySelected[0] = false;
        }
        else
        {
            cityObj.options[cityObj.options.selectedIndex].selected=false;
            cityObj.options[3].selected=true;
        }
        }
     }
     else{
         for(var i=0; i<len; i++) {  //if there are multiple <html:select> then take length of form object n iterate
                if (selObject == cityObj[i] )  
                {
                    if(cityObj[i].value==cityObj[i].options[3].value) // if 3rd option is selected
                    {
                        alert("You have selected Paris City");
                        citySelected[i] = true;
                    }
                    if(!sctypeObj[i].options[3].selected && citySelected[i]) //if 3rd option is deselected
                    {
                        var result = confirm("You have selected cities other than paris");
                        if(result)
                        {
                            cityObj[i] = false;
                        }
                    else
                    {
                        cityObj[i].options[cityObj[i].options.selectedIndex].selected=false;
                        cityObj[i].options[3].selected=true;
                    }
                    }
                }
         }
     }
}

以下是适用于 jsp 的 Javascript onload()

function onload()
{
         var form = document.forms[0];
         var formObj =  form["city"];
         var size=formObj.size;
         var len = formObj.length;

         for(var i=0; i<len; i++) {
         citySelected[i] = false;
         }
         if(size==0){   //if there is seingle <html:select> element
            var cityvalue=formObj.value;
            if(cityvalue=="P")
             {
                 citySelected[0] = true;
             }
         }
         else
         {
            for(var i=0; i<len; i++) {   //if there are multiple <html:select> elements
             var cityvalue=formObj[i].value;
             if(cityvalue=="P")
             {
                 citySelected[i] = true;
             }
            }
         }
}

这是我发现问题的地方。如果有单个或多个<html:select>元素,则 Onload 逻辑工作正常。但是当我的 jsp 中根本没有<html:select>元素时,如果我可以选择删除所有下拉列表,那么我的 jsp 会抛出 Javascript 错误:

“大小为空或不是对象”。

我该如何解决这个问题?在onload()功能中,我<html:select>使用大小来区分元素。

if(size==0)
{
   //logic for single <html:select>
}
else
{
  //logic for multiple html select
}

但是当我的jsp中根本没有<html:select>元素时,如果我可以选择删除所有下拉菜单,那么我的jsp会抛出Javascript错误:

“大小为空或不是对象”。

我该如何解决这个问题?任何帮助都会很棒..

4

5 回答 5

1

确定表单中元素数量的另一种方法<select>是使用jQuery的选择器,如下所示:

$('#myForm select').length // returns number of <select> elements in the form
于 2012-08-28T07:47:58.950 回答
0

您可以使用 Javascript 中 null/undefined 计算结果为 false 的事实,如下所示:

if(!size)
{
   //logic for single <html:select>
}
else
{
  //logic for multiple html select
}
于 2012-08-28T07:03:20.957 回答
0

线路var size=formObj.size;可能是问题的原因。当 size 属性为空或未定义时,尝试使用“或”语句来防止错误:

var size = formObj.size || 0;
于 2012-08-28T07:19:07.977 回答
0

采用:

 var formObj = document.getElelementsByName('city');
 var length = formObj.length;

 if(length == 0) {
      // No select element
 }
 if(length == 1) {
      // One select element
 } else {
      // More than one select elements
 }

我不确定如何size在这里提供帮助,这不是必需的。undefined在这种情况下,尺寸总是会返回。

于 2012-08-28T16:51:18.093 回答
0

如果单个select元素length返回 4,则似乎内部存在其他同名select元素并且这些元素被隐藏。 但是,迭代集合类型并不是一个正确的函数,而是我们需要.jsp
getElementByName('propertyName')getElementsByName('propertyName')

于 2012-08-29T10:13:23.747 回答