2013-02-01 11 views
35

Próbuję sformatować dane liczbowe wprowadzane przez użytkownika do waluty przy użyciu javascript. To działa dobrze na <input type="text" />. Jednak na <input type="number" /> nie mogę wydawać się być w stanie ustawić wartość do niczego, która zawiera wartości nieliczbowe. Poniższa skrzypce pokazuje mój problemUstaw wartość waluty w <typ wejściowy = "liczba" />

http://jsfiddle.net/2wEe6/72/

Czy mimo to dla mnie, aby ustawić wartość na coś $125.00?

Chcę użyć <input type="number" />, więc urządzenia mobilne wiedzą, aby wyświetlić klawiaturę do wprowadzania liczb.

+6

nie można po prostu wyświetlić $ w przód kontroli? Czy chcesz dać użytkownikom kontrolę nad walutą, którą chcą wprowadzić? W tym drugim przypadku obawiam się, że tylko 'type =" text "' kwalifikuje się. –

+0

@MrLister to naprawdę dobry punkt. Prawdopodobnie to właśnie skończę. – Danny

+0

Jeśli chcesz zezwolić użytkownikowi na zmianę typu waluty, ale nadal wykonaj "typ =" numer "", możesz wybrać pole wyboru z różnymi symbolami waluty. Zwróć uwagę, że wiele krajów umieszcza symbol waluty po numerze zamiast wcześniej. – RoboticRenaissance

Odpowiedz

12

W końcu zrobiłem wtyczkę jQuery, która odpowiednio sformatuje <input type="number" /> dla mnie. Zauważyłem też, że na niektórych urządzeniach przenośnych atrybuty min i max w rzeczywistości nie uniemożliwiają wprowadzenia niższej lub większej liczby niż podana, więc wtyczka również to uwzględni. Poniżej znajduje się kod i przykład:

(function($) { 
 
    $.fn.currencyInput = function() { 
 
    this.each(function() { 
 
     var wrapper = $("<div class='currency-input' />"); 
 
     $(this).wrap(wrapper); 
 
     $(this).before("<span class='currency-symbol'>$</span>"); 
 
     $(this).change(function() { 
 
     var min = parseFloat($(this).attr("min")); 
 
     var max = parseFloat($(this).attr("max")); 
 
     var value = this.valueAsNumber; 
 
     if(value < min) 
 
      value = min; 
 
     else if(value > max) 
 
      value = max; 
 
     $(this).val(value.toFixed(2)); 
 
     }); 
 
    }); 
 
    }; 
 
})(jQuery); 
 

 
$(document).ready(function() { 
 
    $('input.currency').currencyInput(); 
 
});
.currency { 
 
    padding-left:12px; 
 
} 
 

 
.currency-symbol { 
 
    position:absolute; 
 
    padding: 2px 5px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<input type="number" class="currency" min="0.01" max="2500.00" value="25.00" />

41

Dodaj step="0.01" parametrów <input type="number" />:

<input type="number" min="0.01" step="0.01" max="2500" value="25.67" /> 

Demo: http://jsfiddle.net/uzbjve2u/

Ale znak dolara musi pozostać na zewnątrz pola tekstowego ... każdy nienumeryczny lub separator charachter zostanie przycięty automatycznie.

W przeciwnym razie można użyć klasycznego pola tekstowego, like described here.

+0

Nie to, o co prosił OP ...jeśli value = "25,6", to pokaże ... powinno pokazać "25.60" – patrick

+1

[specyfikacje/implementacje HTML5 są błędne] (https://bugzilla.mozilla.org/show_bug.cgi?id=1003896) @ patrick. To, czego chcesz, nie jest możliwe, z wyjątkiem [hackish, rozwiązań zależnych od przeglądarki] (https://stackoverflow.com/a/19205426/1654265), które jednak nie będą działać w Firefoksie. Zmontowałem skrzypce BTW, ponieważ funkcja 'Globalize.format' teraz w ogóle ją łamała * w FF, więc myślę, że powinienem ci podziękować za twoją opinię :) –

+1

@AndreaLigios Link, który opisałeś jako klasyczny textbox jest dokładnie tym, czego szukałem w formatowaniu waluty dla pola tekstowego. Musiałem wprowadzić kilka zmian, ale to był świetny początek. – Jester

0

Przeglądarka dopuszcza tylko wejścia numeryczne, gdy typ jest ustawiony na "numer". Details here.

Można użyć type = „text” i odfiltrować wszelkie inne niż wejścia numerycznego przy użyciu JavaScript like descripted here

3

Wydaje się, że trzeba dwa pola, listę wyboru dla waluty oraz pole numer dla wartość.

Powszechną techniką w takim przypadku jest użycie div lub span dla wyświetlania (pola formularza poza ekranem), a po kliknięciu przełącz do elementów formularza do edycji.

+0

To jest o wiele lepszy wybór niż pozwolenie użytkownikom na wpisanie waluty. –

+0

Przepraszamy, ale podany tutaj przykład jQuery i CurrencyTextBox w Dojo dają o wiele bardziej przyjazne dla użytkownika metody zarządzania wprowadzaniem i sprawdzaniem poprawności niż dwa pola. Z wyjątkiem urządzeń mobilnych, ponieważ musisz używać klawiatury tekstowej. Ostateczna ironia jest na moim iPadzie, type = "number" zawiera mój symbol waluty locale, £. HTML naprawdę musi nadrobić zaległości i zapewnić coś, co przełącza się na odpowiednią klawiaturę dla waluty. –

6

Jesteście całkowicie właściwe numery mogą iść tylko w polu numerycznym. Używam dokładnie to samo, co już notowane z odrobiną css stylizacji na tagu Okres:

<span>$</span><input type="number" min="0.01" step="0.01" max="2500" value="25.67"> 

Następnie dodać trochę stylizacji Magic:

span{ 
    position:relative; 
    margin-right:-20px 
} 
input[type='number']{ 
    padding-left:20px; 
    text-align:left; 
} 
+0

To jest ładne i czyste. jedynym problemem jest to, że kliknięcie symbolu waluty nie skupia danych wejściowych. –

+0

To jest prosty problem z javascript. Kliknij zdarzenie na zakres, aby ustawić wejście – frugalcoder

+3

... lub po prostu użyj znacznika '

Powiązane problemy