2014-03-30 1 views
0

나는 각 단어를 입력 한 후에 자동으로 쉼표를 삽입하려고 시도합니다. 내 코드와 fiddle이 참조를 위해 적합하지 않습니다.Dijit 텍스트 필드에서 각 단어를 키패드에 쉼표로 구분합니다.

JSP로

<body class="claro"> 

    <input 
     data-dojo-type="dijit.form.ValidationTextBox" 
     data-dojo-props="uppercase:true" 
     id="validationTextBox"/> 
</body> 

자바 스크립트

dojo.require("dijit.form.ValidationTextBox"); 

dojo.ready(function() { 

    dojo.connect(dijit.byId("validationTextBox"), "onkeyup", function() { 

     //alert('hello'); 
    var str = dijit.byId("validationTextBox").value.replace(/(\w)[\s,]+(\w?)/g, '$1, $2'); 
    if (str!= dijit.byId("validationTextBox").value) dijit.byId("validationTextBox").value = str; 
    }); 

}); 

답변

1

생각은 옳았다와 정규 표현식이 작동 듯하지만 너무주의 깊게 보지 않았다.

이전 버전의 Dojo (1.6 이전)를 사용하여 코딩하는 것처럼 보였지만 바이올린은 AMD 지원 Dojo 1.9.3을 사용하도록 설정되었습니다.

다음은 AMD를 사용하는 작동 예제입니다. 당신이 이것을 성취 할 수있는 많은 방법들이 있습니다. 나는 Stateful 방법으로 갔다. dijit 속성을 '볼'수 있고 함수가 변경되면 함수를 호출 할 수 있습니다. 또한 intermediateChanges를 true로 설정하여 더 좋은 효과를 얻을 수도 있습니다.

http://jsfiddle.net/RichAyotte/DqVt7/

<body class="claro"> 
    <input 
    data-dojo-type="dijit/form/ValidationTextBox" 
     data-dojo-props="uppercase:true, intermediateChanges:true" 
     id="validationTextBox" 
    /> 
</body> 

require([ 
    'dijit/form/ValidationTextBox' 
    , 'dijit/registry' 
    , 'dojo/domReady!' 
], function(
    ValidationTextBox 
    , registry 
){ 
    var tb = registry.byId('validationTextBox'); 
    tb.watch('value', function(property, oldValue, newValue) { 
     tb.set('value', newValue.replace(/(\w)[\s,]+(\w?)/g, '$1, $2')); 
    }); 
}); 
관련 문제