2009-08-29 3 views
0

안녕하세요! select 요소의 이름을 변경하는 데 문제가 있습니다. 페이지에 생성 된 약 28 개의 선택 요소가 있습니다. 각 선택 요소에는 "드롭 다운"이라는 이름이 지정되었습니다. 나는이 이름을 사용하여 선택한 옵션에 따라 합계를 계산합니다.javascript를 사용하고 참조 할 태그의 이름 만 사용하여 html select 요소의 이름을 변경하는 방법은 무엇입니까?

하지만이 정보를 PHP 페이지에 전달하면 마지막 선택 요소 만 표시됩니다. 이를 극복하기 위해 "dropdown []"onsubmit이라는 레이블이 붙은 모든 선택 태그가 필요합니다. 이것은 자바 스크립트를 읽으려면 "드롭 다운"이 필요하고 PHP를 처리하려면 "드롭 다운 []"이 필요하기 때문입니다. 단부의 형태를 검증하는 동안

<select name="dropdown[]"> 
    <option> 
    <option> 
    <option> 
    </select> 

:

<select name="dropdown"> 
<option> 
<option> 
<option> 
</select> 

로 변경되어야한다. 어떻게해야합니까? 이름과 함께 ID를 사용하지 않습니다. 복잡하다고 생각하기 때문입니다.

+0

나는 무엇을 하려는지 확실하지 않습니다. 28 개의 선택 요소가 있으며 이름을 다른 것으로 변경하고 싶습니까? 28 명이 모두 같은 이름을 갖고 있을까요? –

+0

예 .. 그들은 것입니다 .. 왜냐하면 나는 자바 스크립트와 PHP가 다르게 그들을 원하기 때문에. – user165242

답변

1

나는 당신이 당신이 문서에 지정된 이름으로 당신에게 요소는 반복 할 수있는 배열을 반환합니다 getElementsByName 기능을 사용할 수 있으며, '드롭 다운 []'이름을 유지하는 것이 좋습니다 :

var dropdownArray = document.getElementsByName('dropdown[]'), 
    i, element, n = dropdownArray.length; 

for (i = 0; i < n; i++) { 
    element = dropdownArray[i]; 
    // you can check the value of each element here... 
} 

편집 : 코드 수정 :

function addup(){ 
    var tot = 0, i, // i declaration was missing 
     dropdowns = document.payment.elements['dropdown[]']; 

    for(i = 0;i<dropdowns.length;i++) { 

    //alert(i); 
    var find = dropdowns[i]; 
    var check = find.options[find.selectedIndex].value; 
    //alert(check); 

    if(check.substring(0,3)=='pay') { 
     // not using eval anymore 
     var tot1 = document.payment.elements[check.substring(4)+'_amount'].value; 
     //alert(tot1); 
     tot += +tot1; // unary plus operator to convert to number 
    } 
    document.payment.total_amount.value=tot; 
    calcTotal(); 
    } 
} 
+0

그랬 잖아! 당신도 평가판을 삭제했습니다! 대단히 감사합니다. – user165242

+0

당신은 환영합니다, 거의 항상 eval을 사용하는 것을 피하는 방법이 있다는 것을 기억하십시오 ... http://jslint.com/lint.html#evil – CMS

0

을 당신이 잘못이 문제를 접근하고 생각합니다. 요소를 고유하게 식별하려면 "id"를 사용해야합니다. 그런 다음 자유롭게 사용할 수있는 많은 라이브러리 중 하나 (jQuery, dojo query, ...)를 사용하여 페이지에서 요소를 선택하는 더 좋은 방법을 제공 할 수 있습니다. 특정 요소 클래스 이름을 지정하거나 페이지의 모든 "선택"요소를 찾는 것만으로도 가능합니다.

나는 이름의 끝에 "[]"이 왜 당신에게 도움이되는지에 관해서 완전히 어둡다. 하지만 나는 PHP에 익숙하지 않다.

+0

약 28 가지 요소를 선택했습니다.드롭 다운 후 []를 추가하지 않으면 php가 마지막 (28 번째) 요소를 가져 와서 나머지는 그대로 둡니다. – user165242

+0

같은 이름으로 태그가있을 것이라는 알림이 필요하고 배열을 빌드합니다. – user165242

0

코드를 표시 할 수 있기 때문에이 상자를 사용하십시오.

내가 "드롭 다운 []"나는이 경우 같은 오류가 될 것 같은 요소라는 이름의 경우 : -

function addup(){ 
var tot=0; 
for(i=0;i<(document.payment.dropdown.length);i++) 
    { 
     //alert(i); 
     var find=document.payment.dropdown[][i]; 
     var check=find.options[find.selectedIndex].value; 
     //alert(check); 

        if(check.substring(0,3)=='pay') 
        { 
        var other="document.payment."+check.substring(4)+"_amount.value"; 
        var tot1=eval(other); 
        //alert(tot1); 
        tot+=parseInt(tot1); 

        } 

        document.payment.total_amount.value=tot; 
        calcTotal(); 


    } 

} 

사면 초라한 코드,하지만이 나던 내가로 이름을 경우 제대로 작동 "쓰러지 다[]". 그래서 나는 처음에 "dropdown"이라는 이름을 필요로하고 "dropdown []"onsubmit으로 변경해야합니다.

0

방금 ​​질문을 찾았습니다. 다만 ID를 추가하는 이유는

당신의 선택에 태그를 (예를 들어 'itsID') 다음으로 이름을 변경을 가리 :

var ref = document.getElementById('itsID'); 
     ref.name = "dropdown[]"; 

그것은 심판과 나를 위해 작동합니다.

관련 문제