我爲我的應用程序使用KnockoutJS創建了一個僅限數字的輸入驗證器。當用戶按下非法按鍵(字母)時,我想讓目標輸入閃爍在上的CSS動畫,每個非法按鍵。就目前而言,它只是觸發一次動畫,我不知道爲什麼。帶有CSS動畫的敲除輸入驗證
例子:http://codepen.io/anon/pen/oIamG/
任何人任何想法?
我爲我的應用程序使用KnockoutJS創建了一個僅限數字的輸入驗證器。當用戶按下非法按鍵(字母)時,我想讓目標輸入閃爍在上的CSS動畫,每個非法按鍵。就目前而言,它只是觸發一次動畫,我不知道爲什麼。帶有CSS動畫的敲除輸入驗證
例子:http://codepen.io/anon/pen/oIamG/
任何人任何想法?
問題是你需要重置你的CSS動畫。爲了做到這一點,你需要刪除動畫,然後再添加它。
移動-webkit-動畫性能到輸入像
input {
border: 2px solid black;
padding: 8px;
/* 0.2s is used, just to see the effect, the animation needs to be */
-webkit-animation-duration: 0.2s;
-webkit-animation-direction:forwards;
-webkit-animation-timing-function:ease-in-out;
}
@-webkit-keyframes inputValidationBorder {
0% { border: 2px solid red; }
100% { border: 2px solid black; }
}
然後使用以下綁定:
ko.bindingHandlers.numeric = {
init: function (element, valueAccessor) {
$(element).bind('webkitAnimationEnd', function(){
this.style.webkitAnimationName = '';
});
$(element).on('keydown', function (event) {
// allow backspace, delete, tab, escape, enter/return and period.
// if input is a letter then disable keypress
if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
element.style.webkitAnimationName= 'inputValidationBorder';
event.preventDefault();
}
});
}
};
[這裏是一個工作示例](http://codepen.io/anon/pen/rEKgF/)。我還想指出的是,在event.keyCode上過濾時,用戶仍然可以輸入ALT + _number_,它們不會被if語句捕獲。 –
非常感謝,這個作品很棒! – leaksterrr
@MjorjorByte你能解釋一下你在這裏爲我做了些什麼嗎?看起來您已經使用'this'而不是將事件參數傳遞給函數 - 這裏的基本原理是什麼? – staypuftman
想我已經發現了問題,但沒有解決:在removeClass元素心不是射擊 - 所以動畫不能再發生。查看Chrome Dev Tools並在事件發生期間檢查輸入字段;你會看到我在說什麼。 – staypuftman
@staypuftman你是完全正確的,我看到在我的本地副本,但我只是認爲這是我瘋了。 – leaksterrr
我不知道淘汰賽(學習Ember自己;)但也許淘汰賽使用'然後'並承諾以某種方式。我只是在學習承諾,但這看起來就像他們會在哪裏發揮作用。 Knockout的文檔有一點點關於它:http://knockoutjs.com/documentation/unobtrusive-event-handling.html – staypuftman