2011-10-14 4 views
2

모두create_row() 함수의 문제점

이 자바 스크립트 코드는 사용자가 드롭 다운 상자를 선택하여 입력 상자를 동적으로 추가합니다. 나는 그것이 있어야 할 곳이 거의 없지만, "msds_copy"와 "cofa_copy"의 경우 모두 테스트 할 때 "html2"에 대해 동일한 데이터를 표시합니다. "msds_copy"선택은 두 번째 양식 상자에 "Region/Language"라고 말하면서 "Batch Number"라고 말합니다.

왜 이런 일이 일어날 수 있으리라 생각하십니까?

inquiry_type_onchange: function(e) { 
     var place_order = 1, 
      order_status = 2, 
      telalert_signup = 3, 
      invoice_questions = 4, 
      msds_copy = 5, 
      cofa_copy = 6, 
      html = null, 
      html2 = null, 
      inquiry = e.target, 
      id = "inquiry_type_addendum", 
      form_row = dojo.query("."+id); 

     //Clear any possible previous additions. 
     if (form_row != null) 
      form_row.forEach(dojo.destroy); 

     //Add the correct new field to the form. 
     switch (inquiry.selectedIndex) { 
      case place_order: 
       html = this.create_form_row(id, "Account Number:"); 
       break; 
      case order_status: 
       html = this.create_form_row(id, "Order Number:"); 
       break; 
      case telalert_signup: 
       html = this.create_form_row(id, "Account Number:"); 
       break; 
      case invoice_questions: 
       html = this.create_form_row(id, "Invoice Number"); 
       break; 
      case msds_copy: 
       html = this.create_form_row(id, "Product Name:"); 
       html2 = this.create_form_row(id + "_2", "Region/Language:"); 
      case cofa_copy: 
       html = this.create_form_row(id, "Product Name:"); 
       html2 = this.create_form_row(id + "_2", "Batch Number:"); 
      default: 
     } 

     if (html == null) return; 
     //Place the new element below the inquiry_type field. 
     var placeat = dojo.byId('buttons'); 
     dojo.place(html, placeat, "before"); 
     if(html2!=null) 
      dojo.place(html2, placeat, "before"); 
    }, 

    create_form_row: function(id, label) { 
     //Container 
     var a = dojo.create("div", { id: id, className: "question inquiry_type_addendum", style: "padding-top:4px;" }); 
     //Label 
     var b = dojo.create("div", { className: "label", innerHTML: label, style: "margin-top:8px;" }, a); 
     //Field 
     var c = dojo.create("div", { className: "field" }); 
     var d = dojo.create("span", { className: "full_number_span span" }); 
     var e = dojo.create("input", { type: "text", className: "textbox full_number", name: label }, d); 
     dojo.place(d, c); 
     dojo.place(c, a); 
     return a; 
    } 
}); 

답변

0

당신은 당신의 break의 누락 및 스위치 케이스 msds_copy 다음의 경우 cofa_copy까지 하락 후 실행됩니다.

 case msds_copy: 
      html = this.create_form_row(id, "Product Name:"); 
      html2 = this.create_form_row(id + "_2", "Region/Language:"); 
      break; // <---- 
     case cofa_copy: 
      html = this.create_form_row(id, "Product Name:"); 
      html2 = this.create_form_row(id + "_2", "Batch Number:"); 
      break; // <---- 
+0

오 와우. 여기 너무 오랫동안 화면을 쳐다 보지! 정말 고마워! – ndisdabest