2010-05-19 5 views
0

나는 새로운 사이트를 개발하고 있으며 여기에서는 사용자가 입력 텍스트 필드에 가격을 입력하는 것이 가능합니다. 그래서 필자가 가격을 입력하는 데 변환 할 수있는 jQuery 코드가 필요하다. 즉, 사용자가 "1000"을 입력하면 입력 필드의 보이는 텍스트가 마침표와 함께 자동으로 "1.000"으로 변환됩니다. "10000"을 입력하면 "10.000"등으로 변환해야합니다. 이 웹 사이트에서 실제 예제를 볼 수 있습니다. http://www.boligsiden.dk/ 덴마크어로되어 있지만지도 아래에는 첫 페이지에 있습니다. 필드를 입력하십시오. 그들 중 하나는 "최소 kontaktpris"입니다. 여기에 숫자를 입력하고 내가 찾고있는 효과를 볼 수 있습니다.jQuery 숫자 구분 기호 - 각각 1.000으로 숫자 분리

아무에게도이를 달성 할 수있는 방법을 알고 있습니까? jQuery 플러그인 또는 "홈 메이드"코드 중 하나?

답변

2
+0

이것은 멋진 도구처럼 보입니다. 그러나 이것에 대한 시연을 볼 수는 없으므로 그것을 사용하는 방법을 잘 모르겠습니다. 몇 가지 입력 필드를이 도구에 연결하려면 어떻게해야합니까? 코드 예제를 줄 수 있습니까? –

1

나는 php.js에서 숫자 형식을 사용합니다 : 이 http://phpjs.org/functions/number_format:481

다음 같은 것을 할 :

$(element).change(function() { 
    $(this).val(number_format($(this).val(), 0, '.', '.')); 
} 
+0

.NET 환경에서 작동합니까? –

+0

.NET에서는별로 작동하지 않지만 완전히 클라이언트 측이므로 그렇습니다. –

1

JavaScript: The Good Parts

잊지 마세요 이 http://www.boligsiden.dk

감사
function NumericBox_KeyDown(o, e, separate, allowComma) { 
    o.onkeypress = o.onkeyup = null; 
    if (!e) e = window.event; 
    var code = e.keyCode; 
    if (!code && e.which) code = e.which; 
    if (code >= 96 && code <= 105) code -= 48; 
    var preventDefault = ((code > 57 && (code != 110 && code != 188)) || code == 32 || (code >= 48 && e.shiftKey)); 
    if (!allowComma && (code == 188 || code == 110)) preventDefault = true; 
    if (!preventDefault) { 
     if (separate) { 
      if (NumericBox_CanSelect(o)) { 
       if (((code >= 48 && code <= 57) || code == 8 || code == 46 || code == 110 || code == 188)) { 
        preventDefault = NumericBox_FormatNumber(o, code, allowComma); 
       } 
      } 
     } 
    } 
    if (preventDefault) { 
     o.onkeypress = o.onkeyup = function (e) { 
      if (!e) e = window.event; 
      return false; 
     }; 
     return false; 
    } 
    return true; 
} 

function NumericBox_CanSelect(o) { 
    return (typeof(o.createTextRange) != 'undefined' || typeof(o.selectionStart) != 'undefined'); 
} 

function NumericBox_FormatNumber(o, code, allowComma) { 
    if (!allowComma && (code == 188 || code == 110)) return true; 
    var preventDefault = false; 
    var startPos = getSelectionStart(o); 
    var endPos = getSelectionEnd(o); 
    var s = o.value; 

    //delete all non numbers except one optional comma 
    var i = o.value.length - 1; 
    while (i >= 0) { 
     var c = s.charAt(i); 
     if (c < '0' || c > '9') { 
      if (c == ',' && allowComma == true) { 
       allowComma = false; 
      } else { 
       s = s.substring(0, i) + s.substring(i + 1); 
       if (startPos > i) startPos--; 
       if (endPos > i) endPos--; 
      } 
     } 
     i--; 
    } 
    if (startPos == 1 && s.charAt(0) == '0' && code == 48) preventDefault = true; 
    if (startPos == 0 && s.length > 0 && code == 48) preventDefault = true; 
    while (s.length > 0 && s.charAt(0) == '0' && s.charAt(1) != ',' && code != 48) { 
     s = s.substring(1); 
     startPos--; 
     endPos--; 
    } 
    if (code == 188 || code == 110) { 
     preventDefault = !allowComma; 
     if (allowComma && startPos == 0) { 
      s = '0' + s; 
      startPos++; 
      endPos++; 
     } 
    } 

    var s2 = s.substring(0, startPos); 
    for (var k = startPos; k < endPos; k++) 
    s2 += 'B'; 
    s2 += s.substring(endPos); 
    var s3 = s2; 
    var s4 = s; 
    if (code >= 48 && code <= 57 && !preventDefault) { 
     s3 = s3.substring(0, startPos) + 'A' + s3.substring(startPos); 
     s4 = s4.substring(0, startPos) + 'A' + s4.substring(startPos); 
    } 
    if (code == 8 && startPos == endPos && !preventDefault) { 
     if (s3.charAt(startPos - 1) == ',') { 
      s3 = s3.substring(0, startPos - 1) + 'B' + s3.substring(startPos); 
     } else { 
      s3 = s3.substring(0, startPos) + 'C' + s3.substring(startPos); 
      s4 = s4.substring(0, startPos) + 'C' + s4.substring(startPos); 
     } 
    } 
    if (code == 46 && startPos == endPos && !preventDefault) { 
     if (s3.charAt(startPos) == ',') { 
      s3 = s3.substring(0, startPos) + 'B' + s3.substring(startPos + 1); 
     } else { 
      s3 = s3.substring(0, startPos + 1) + 'C' + s3.substring(startPos + 1); 
      s4 = s4.substring(0, startPos + 1) + 'C' + s4.substring(startPos + 1); 
     } 
    } 

    var commaPos = s3.indexOf(','); 
    if (commaPos < 0) commaPos = s3.length; 
    if ((code == 188 || code == 110) && !preventDefault) commaPos = startPos; 
    var j = 0; 
    for (var l = commaPos; l > 0; l--) { 
     if (s3.charAt(l) == 'C') j -= 2; 
     if (j > 2) { 
      if (l <= startPos) { 
       startPos++; 
       endPos++; 
      } 
      s4 = s4.substring(0, l) + '.' + s4.substring(l); 
      j = 0; 
     } 
     if (s3.charAt(l - 1) != 'B') j++; 
    } 

    o.value = s4.replace('A', '').replace('C', ''); 
    setCursorPosition(o, startPos, endPos); 
    if (typeof(document.execCommand) != 'undefined') try { 
     document.execCommand('OverWrite', false, false); 
    } catch (e) {} 
    return preventDefault; 
} 


function getSelectionStart(o) { 
    if (o.createTextRange) { 
     var r = document.selection.createRange().duplicate() 
     r.moveEnd('character', o.value.length) 
     if (r.text == '') return o.value.length 
     return o.value.lastIndexOf(r.text) 
    } else return o.selectionStart 
} 

function getSelectionEnd(o) { 
    if (o.createTextRange) { 
     var r = document.selection.createRange().duplicate() 
     r.moveStart('character', -o.value.length) 
     return r.text.length 
    } else return o.selectionEnd; 
} 
+0

안녕하세요. 나는 이것을 시도했지만, 볼 수있는 유일한 문제는 입력 필드에 텍스트를 표시하고 새 번호를 누르면 이전 번호의 끝에 새 번호가 삽입된다는 것입니다. 어떻게 이럴 수있어? 그리고 그것을 해결할 수 있습니까? –