2015-01-08 5 views
1

"유효성 검사"버튼이있는 양식을 작성 중입니다. 이 버튼의 목적은 모든 필드가 완료되었는지 확인하고 확인하는 것입니다 (이것이 프로젝트에서 요구하는 것임). 다음은 필드가 null인지 확인한 다음 테두리 색을 변경하고 텍스트 상자를 표시하는 코드입니다.Livecycle javascript ... condense if 문

if (form1.Main.sfRequestor.requestNameFirst.rawValue == null){ 
    form1.Main.sfRequest.txtValidate.presence = "visible"; 
    form1.Main.sfRequestor.requestNameFirst.border.edge.color.value = "255,0,0" 
} else { 
    form1.Main.sfRequest.txtValidate.presence = "hidden"; 
    form1.Main.sfRequestor.requestNameFirst.border.edge.color.value = "255,255,255" 
}; 

if (form1.Main.sfRequestor.requestNameLast.rawValue == null){ 
    form1.Main.sfRequest.txtValidate.presence = "visible"; 
    form1.Main.sfRequestor.requestNameLast.border.edge.color.value = "255,0,0" 
} else { 
    form1.Main.sfRequest.txtValidate.presence = "hidden"; 
    form1.Main.sfRequestor.requestNameLast.border.edge.color.value = "255,255,255" 
}; 

확인해야하는 여러 하위 양식에 20 개 이상의 입력란이 있습니다. 나는 코드를 통합하려하지만 그렇게하는 방법을 잃어 버렸다. 변수가 Javascript에서 필드 이름을 처리 할 수 ​​있습니까?

+0

'form1','Main','sfRequestor' 및 다른 변수는 무엇입니까? – devqon

+0

당신이 할 수있는 괄호 표기법으로 requestNameFirst [ "rawValue"] – Hacketo

+0

어떤 종류의 요소가 있습니까? 그들은 모두 텍스트 상자입니까? –

답변

0

루프를 매우 쉽게 만들 수 있으며 인생는, 당신은 당신이 플래그를 사용하는 대신이 마지막을 설정하지 않으있는 한 어떤 마지막 항목의 조건 txtValidate.presence 만 적으로 설정됩니다처럼 보이는

(function (arr) { 
    var txtValidate = form1.Main.sfRequest.txtValidate, 
     i, e; 
    for (i = 0; i < arr.length; ++i) { 
     e = form1.Main.sfRequestor[arr[i]]; // cache me 
     if (e.rawValue == null){ 
      txtValidate.presence = "visible"; 
      e.border.edge.color.value = "255,0,0" 
     } else { 
      txtValidate.presence = "hidden"; 
      e.border.edge.color.value = "255,255,255" 
     } 
    } 
}(['requestNameFirst', 'requestNameLast'])); 

그러나 청소 네임 스페이스를 유지 ? 예 : sfRequestorsfRequest 가정 일반적인 양식에 대한

(function (arr) { 
    var txtValidateState = 'hidden', 
     i, e; 
    for (i = 0; i < arr.length; ++i) { 
     e = form1.Main.sfRequestor[arr[i]]; 
     if (e.rawValue == null){ 
      txtValidateState = "visible"; // any null makes txtValidate visible 
      e.border.edge.color.value = "255,0,0" 
     } else { 
      e.border.edge.color.value = "255,255,255" 
     } 
    } 
    form1.Main.sfRequest.txtValidate.presence = txtValidateState; // set last 
}(['requestNameFirst', 'requestNameLast'])); 

업데이트,

(function (form, arr) { 
    var txtValidateState = 'hidden', 
     i, e; 
    for (i = 0; i < arr.length; ++i) { 
     e = form.sfRequestor[arr[i]]; 
     if (e.rawValue == null){ 
      txtValidateState = "visible"; 
      e.border.edge.color.value = "255,0,0"; 
     } else { 
      e.border.edge.color.value = "255,255,255"; 
     } 
    } 
    form.sfRequest.txtValidate.presence = txtValidateState; 
}(form1.Main, ['requestNameFirst', 'requestNameLast'])); 

sfRequest 가정 업데이트는 일정하지만 sfRequestor 다른 뭔가가 될 수

(function() { // moved IIFE to protect namespace 
    function validate(form, subform, arr) { // now named, new param subform 
     var txtValidateState = 'hidden', 
      i, e; 
     for (i = 0; i < arr.length; ++i) { 
      e = form[subform][arr[i]]; // select from subform 
      if (e.rawValue == null){ 
       txtValidateState = "visible"; 
       e.border.edge.color.value = "255,0,0"; 
      } else { 
       e.border.edge.color.value = "255,255,255"; 
      } 
     } 
     form.sfRequest.txtValidate.presence = txtValidateState; // assuming stays same 
    } 
    validate(form1.Main, 'sfRequestor', ['requestNameFirst', 'requestNameLast']); 
    validate(form1.Main, 'sfClientInfo', ['firstname']); 
    // if you have many here you can re-write as a loop again 
}()); 
+0

와우, 고마워요! 내가 볼 수없는 유일한 일은 여러 개의 하위 양식이 있다는 것입니다. – turkaffe

+0

어쩌면 당신은 당신이 원하는 양식을 참조하는 간단한 추가 param/arg로 할 수있을 것입니다. :) –

+0

@silviak 편집을보고 양식이 이런 식으로 참조 할 수 없는지 알려주십시오 ---- 이 함수를 여러 번 (다른 폼에 대해) 실행하고 싶다면 이름을 부여하기를 원할 수도 있습니다. –

0

쉽게 간단한 함수로이 만들 수 : 다음

function validateField(element) { 
    if (element.rawValue == null) { 
     form1.Main.sfRequest.txtValidate.presence = "visible"; 
     element.border.edge.color.calue = "255,0,0"; 
    } 
    else { 
     form1.Main.sfRequest.txtValidate.presence = "hidden"; 
     element.border.edge.color.calue = "255,255,255";  
    } 
} 

을 그리고 너무처럼 전화 :

validateField(form1.Main.sfRequestor.requestNameFirst); 
validateField(form1.Main.sfRequestor.requestNameLast); 

가 더욱 단순화하기 위해, 배열 및 루프에 20 개 개의 요소를 넣어

var elements = [form1.Main.sfRequestor.requestNameFirst, form1.Main.sfRequestor.requestNameLast, ...]; 
elements.forEach(function(element) { 
    validateField(element); 
});