2014-01-09 3 views
0

Я хочу применить маску к элементу ввода, когда он получает фокус с помощью jquery.maskedinput плагина. Но в первый раз, когда он фокусируется, маски нет. Только когда он получает фокус во второй раз, появляется маска. Как заставить маску отображать первый раз, когда она фокусируется?Почему маска не применяется?

fiddle

HTML:

<input type=text id=a /> 
    <input type=text id=b /> 

сценарий:

$(document).ready(function() { 
    $('#a').on('focus', function() { 
     $(this).mask('999'); 
    }); 
}); 

ответ

2

Проблема заключается в том, что виджет использует фокус(), чтобы добавить маску. Элемент уже сфокусирован, так как вы регистрируете его после события.

Путь, он должен работать, чтобы зарегистрировать его, когда страница создается

$(function() { 
    $('#a').mask('999') 
}); 

НО, если вы хотите сделать это OnFocus, вам нужно вызвать фокус после удаления вашего мероприятия, так что вы не застревают в петля.

$(function() { 
    $('#a').on('focus.first', function() { 
     $(this).off("focus.first").mask('999').trigger("focus"); 
    }); 
}); 
+0

В качестве альтернативы вместо 'on' /' off' можно использовать '.one', чтобы было ясно, что нужно вызывать только один раз. –