2012-08-28 2 views
0

매우 중요한 문제가 있습니다.서식 객체의 Javascript 크기

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

내 for 루프에 배치되어 있기 때문에 하나 또는 여러 개의 HTML 선택이 될 수 있습니다

다음은 내 JSP 코드입니다. 자바 스크립트 :

다음은 내 자바 스크립트 코드

다음
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로 온로드() 하나가있는 경우

여기
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; 
      } 
      } 
     } 
} 

어디 problem.Onload을 발견하고있다 작동 자바 스크립트 또는 여러 요소를 논리가 잘 작동합니다.하지만 내 jsp pr 전혀 요소가없는 경우 모든 드롭 다운을 삭제할 수있는 옵션이 있으면 내 JSP로 자바 스크립트 오류가 throw됩니다. "크기가 null 또는 개체가 아닙니다."

onload() 함수에서 size를 사용하여 btwn 요소를 구별하는 방법은 무엇입니까?

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

그러나 모든 내 JSP 홍보에는 요소 내가 모든 드롭 다운을 삭제할 수있는 옵션이있는 경우 다음 "개체의 크기가 null인지"내 JSP가. 자바 스크립트 오류가 발생 말할있을 때.

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

답변

1

형태에서 <select> 요소의 수를 결정하는 또 다른 방법은과 같이 jQuery의 선택기를 사용하는 것 :

$('#myForm select').length // returns number of <select> elements in the form 
0

내가 this.Any 도움이 좋을 것 해결하려면 어떻게 .. 문제의 크기 속성이 null이거나 정의되지 않은 경우 오류를 방지하기 위해 "또는"문을 사용하십시오 :

var size = formObj.size || 0; 
+0

또한 0은 false로 평가되므로 길 아래의 어떤 지점에서 0 크기가 시작 되더라도이 코드는 여전히 작동합니다. – Russ

+0

그게 작동하지 않는다면. html : 요소를 모두 선택하고 여전히 던짐 오류. 단일 선택 요소 크기는 0입니다. – cxyz

0

라인 var size=formObj.size;이 원인이 될 수있다 : 당신은 너무 같은 자바 스크립트에서 false로 널 (null)/정의되지 않은 평가하여이 사실을 사용할 수 있습니다

+0

아니요 여전히 동일한 문제 :-( – cxyz

+1

예. 문제는 if (size == 0) statement.i wnt knw에 양식 객체의 크기를 사용하는 대신 구별하는 다른 방법이 있습니다 – cxyz

+0

또한 문제는 var form = document입니다.이 문장에서 [0]은 html : select 요소가 모두 throwing 오류가없는 경우 – cxyz

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을 반환합니다.

+0

길이가 이미 시도되었습니다.이 경우 4 개의 옵션/4 레코드가 있으면 문제가 발생하며 formObject 길이는 4입니다. 괜찮습니다.하지만 1 옵션 또는 1 레코드가 있으면 formObject는 길이가 4 (길이가 드롭 다운 값을 가짐)로 반환하여 모호성을 유발합니다. 속성 = "도시"로 시도했지만 getElementByName ("도시")로 시도합니다. – cxyz

0

단일 select 요소 length 4 반환하는 경우, 동일한 이름 jsp 내부에 존재하고 그 다른 요소 select 숨겨진 것으로 보인다.
그러나 getElementByName('propertyName')은 컬렉션 유형을 반복하는 올바른 함수가 아니며 getElementsByName('propertyName')이 필요합니다.

+0

getElementByName ('propertyname')은 오타입니다 – cxyz

+0

getElementsByName ('city')으로 시도했습니다. 이상하게 formObject 길이는 0 개의 선택 요소를 반환합니다. – cxyz

+0

그러나 나는 다음과 같이 빠른 수정을 발견했다. – cxyz

관련 문제