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>私はforループに配置されているため、単一または複数のhtmlselectが存在する可能性があります。

以下は私の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>要素がある場合はオンロードでロジックは正常に機能<html:select>しますが、jspに要素がまったくない場合、すべてのドロップダウンを削除するオプションがあるとすると、jspはJavascriptエラーをスローします:

「サイズがnullであるか、オブジェクトではありません」。

これを解決するにはどうすればよいですか?関数では、サイズを使用して要素をonload()区別しています。<html:select>

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

しかし<html:select>、jspに要素がまったくない場合、すべてのドロップダウンを削除するオプションがあるとすると、jspはJavascriptエラーをスローします。

「サイズがnullであるか、オブジェクトではありません」。

これを解決するにはどうすればよいですか?どんな助けでも素晴らしいでしょう。

4

5 に答える 5

1

<select>フォーム内の要素の数を決定する別の方法は、次のようにjQueryのセレクターを使用することです。

$('#myForm select').length // returns number of <select> elements in the form
于 2012-08-28T07:47:58.950 に答える
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

この行var size=formObj.size;が問題の原因である可能性があります。size 属性が null または未定義の場合は、"or" ステートメントを使用してエラーを回避してください。

var size = formObj.size || 0;
于 2012-08-28T07:19:07.977 に答える
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

単一のselect要素lengthが 4 を返す場合、同じ名前の他のselect要素が内部jspに存在し、それらが隠されているようです。
ただし、getElementByName('propertyName')コレクション型を反復するための正しい関数ではなく、必要getElementsByName('propertyName')です。

于 2012-08-29T10:13:23.747 に答える