2013-08-30 14 views
5

Mam następujący blok HTML na mojej stronie.maxlength nie działa, jeśli wartość jest ustawiona z kodu js

<input type="text" id="fillingInput"/> 
<input type="text" id="filledInput" maxlength="5"/> 
<input type="button" onclick="$('#filledInput').val($('#fillingInput').val());"/> 

po kliknięciu przycisku, wartość fillingInput jest ustawiony jako wartość dla filledInput. Ale maksymalna długość nie jest brana pod uwagę podczas ustawiania takiej wartości. Jakieś rozwiązanie?

Odpowiedz

1

Jednym ze sposobów uzyskania tego jest ... usunięcie wszystkich znaków po piątej postaci. stosując substring()

<input type="button" id="add" /> 

JS

$('#add').click(function(){ 
    var str=$('#fillingInput').val(); 
    if(str.length > 5) { 
     str = str.substring(0,5); 

    } 
    $('#filledInput').val(str); 
}); 

fiddle ..

zaleca się, aby nie używać inline JavaScript.

+0

dla pojedynczego elementu jest ok. jeśli mam 100s fillInputs z różnymi maksymalnymi długościami, wydaje mi się to trochę kosztowne. –

+0

hmmm ... ya .. w tej sace musisz utworzyć funkcję i wywołać tę funkcję zamiast .. choć to nie zmniejsza Twojej pracy .. czy używasz walidatora jquery do sprawdzania poprawności ?? – bipen

4

Spróbuj slice:

<input type="button" 
    onclick="$('#filledInput').val($('#fillingInput').val().slice(0,5));"/> 
+0

Chcę, aby fillInput był typowym wejściem dla wielu fillInputs, które mają różne maxlengths. szukając nieco bardziej ogólnego sposobu. –

+0

Następnie pobierz wartość atrybutu 'maxlength' i ustaw ją jako drugi parametr do wycinania. Trochę się zduplikowałeś, ale to dlatego, że JS nie musi przestrzegać ograniczenia długości wartości, musisz je jawnie umieścić. – skolima

1

Spróbuj

$(document).ready(function() { 
$('#add').click(function() { 
    var str = $('#fillingInput').val(); 
    if (str.length > 5) { 
     str = str.substring(0, 5); 
     $('#filledInput').val(str); 
    } 

    }); 
}); 
0

jeśli używasz jQuery można dodać "valHook", który przechwytuje do każdego wezwania .val()

$.valHooks.input = { 
    set: function(element, value) { 
     if ("maxLength" in element && value.length > element.maxLength) 
      value = value.substr(0, element.maxLength); 
     element.value = value; 
     return true; 
    } 
}; 
Powiązane problemy