2008-11-10 7 views
2

HI 전체,JavaScript : 동적 필드 이름

제공된 문자열 (내 경우 통화 값)에서 쉼표를 제거하는 자바 스크립트 조각이 있습니다.

 function replaceCommaInCurrency(myField, val) 
    { 
     var re = /,/g; 

     document.net1003Form.myField.value=val.replace(re, ''); 
    } 

'MyField'는 동적으로 시도한 것입니다. 내가 통과 한 모든 분야에서이 작업이 가능하지만 작동하지 않으면 'MyField'가 유효하지 않다는 오류가 발생합니다. 나는 일종의 것을 얻지 만 이것이 유효하다고 생각했다.

다음을 사용하여 호출합니다. onBlur = "replaceCommaInCurrency (this.name, this.value); false를 반환합니다."

this.name과 this.value는 올바른 값 ... 필드 이름과 해당 값을 전달합니다.

이것을 어떻게 동적으로 할 수 있습니까?

- 제이슨

답변

4

당신은 당신의 코드 조각 작업하기 위해 평가 사용할 수 있습니다 아래에 언급 한 바와 같이

eval("document.net1003Form." + myField + ".value=val.replace(re, '');"); 

을의 대괄호는 작동하고 (평가와 같이 빨지 마십시오), 그 것을 잊어 버린 바보 같은 저 :

document.net1003Form[myField].value=val.replace(re, ''); 
과 같이

function replaceCommaInCurrency(field){ 
    var re = /,/g; 
    field.value = field.value.replace(re, ''); 
} 

를 호출됩니다 :

onBlur="replaceCommaInCurrency(this); return false"; 

당신은 이런 것들에 대한 자바 스크립트 툴킷을 사용하는 것이 좋습니다

또는이 뭔가를하려고합니다. 그런 다음 자바 스크립트가 모든 것을 처리하기 위해 기반으로 jQuery를이 코드 조각을 사용하여, 각 입력에 "통화"와 같은 클래스를 설정할 수 있습니다 :

$(function(){ 
    $("input.currency").bind('blur', function(){ 
     this.value = $(this).val().replace(',', ''); 
    }) 
}); 

이 코드는, 준비 문서에 발사 통화로 각 입력에 이벤트 핸들러를 첨부 것 그 클래스를 수정 한 다음 대체해야합니다. 참고로 교체를 위해 정규식이 필요하지 않습니다.이 같은 낮은 수준의 기능을 처리 할 수있는 프레임 워크를 사용한다, 일반적으로

<input type="text" name="..." onchange="removeCommaInCurrency(this);"> 
+1

eval-function을 사용하는 것을 피할 수 있다면, 전체 ECMAscript 세계에서 umingg 기능 ... – roenving

+0

당신은 그것을 피할 수 있습니다. 대괄호를 사용하십시오. – bart

+0

Doh, 예, 구문으로도 업데이트했습니다. – MrKurt

3

당신이 바로 마크 업으로 코딩하는 경우처럼, 예를 들어, onblur = "replaceCommaInCurrency (this)"이벤트를 시작한 컨트롤이 매개 변수로 전달됩니다. jQuery로

myField.value = myField.value.replace(re, ''); 

: 그럼 당신은 같은 것을 할 수 있어야

var jqField = $(myField); 
jqField.val(jqField.val().replace(re, '')); 
0
function removeCommaInCurrency(myField) 
    { 
      var re = /,/g; 

      myField.value=myField.value.replace(re, ''); 
    } 

다음과 같이 호출 필드 이름을 대괄호 표기법을 사용

function replaceCommaInCurrency(myField, val) 
{ 
    var re = /,/g; 

    document.net1003Form[myField].value=val.replace(re, ''); 
} 
1

,하지만 귀하의 질문에 구체적인 대답하는 것입니다 : -

0

flatline와 '이'청소기 접근 방식과 roenving의 솔루션은, 그것은 또한 'document.formname.fieldname'의 문제를 피할 수 있습니다.

('document.forms.formname'을 사용하면 문서 개체의 멤버와 이름이 같은 양식에 충돌이없는 양식에 액세스하고 'forms.elements.fieldname'을 사용하여 필드와 동일하게 할 수 있습니다. JavaScript 객체 인 object [namevariable]도 사용할 수 있습니다. 또는 ID를 추가하고 명확한 document.getElementById 메소드를 사용하십시오.

스크립트로 바인딩을 이동하면 onclick 속성의 인라인 JavaScript도 제거 할 수 있습니다. 마크 업 클리너를 계속 작성 :

<input type="text" class="number" name="something" /> 
... 
<script type="text/javascript"> // external script is best, linked after all forms 
    function numberfield_bind() { 
     var inputs= document.getElementsByTagName('input'); 
     for (var inputi= inputs.length; inputi-->0;) 
      if (inputs[inputi].className=='number') 
       inputs[inputi].onchange= numberfield_change; 
    } 
    function numberfield_change() { 
     this.value= this.value.split(',').join(''); 
    } 
    numberfield_bind(); 
</script>