javascript
  • jquery
  • maskedinput
  • 2015-02-26 11 views 5 likes 
    5

    Używam jQuery Masked Input plugin ustawić wszystkie elementy wejściowe z atrybutem danych maski określonej wartości maski atrybut:Obiekt nie zdefiniowane podczas pracy w pętli, ale nie wtedy, gdy wykonywane sekwencyjnie

    Biorąc pod uwagę to HTML:

    <input type='text' id="a" data-mask='999?999' /> 
    <input type='text' id="b" data-mask='999' /> 
    

    I ten skrypt:

    $("input[data-mask]").each(function() { 
    
        var maskValue = $(this).data('mask'); 
    
        console.log($(this).attr('id') + ": " + maskValue); 
    
        //undefined error here on second iteration "b: 999" 
        //no issues if you remove the data-mask from one of the input elements 
        return $(this).mask(maskValue); 
    
    }); 
    

    drugiej iteracji zostanie zgłoszony błąd: „Uncaught TypeError: niezdefiniowane nie jest funkcją” na tej linii, mówiąc: „podzielić” jest Nie określono.

    firstNonMaskPos = null, $.each(mask.split(""), function(i, c) { 
    

    Kod ten działa dobrze, maski są ustawiane bez problemu.

    $('#a').mask('999?999'); 
    $('#b').mask('999'); 
    

    Czy ktokolwiek może błyszczeć światłem w tym dziwnym zachowaniu?

    Demo jsFiddle here

    Odpowiedz

    8

    Drugi jest wpisany jako number przez data()

    Od split() to metoda ciąg jest rzucanie błąd.

    Proste fix:

    var maskValue = "" + $(this).data('mask'); 
    

    lub

    var maskValue = $(this).data('mask').toString(); 
    
    +0

    Ach, dziękuję! To by idealnie to tłumaczyło. – asawyer

    1

    Zmień .data('mask') z .attr('data-mask'). Działa teraz dobrze dla mnie z jakiegoś powodu ... Może wersja z jQuery jest powiązana?

    Powiązane problemy