使用/ CSS动画进行Knockout输入验证

时间:2014-04-19 16:05:37

标签: javascript jquery css knockout.js knockout-2.0

我已经使用KnockoutJS为我的应用创建了一个仅限数字的输入验证器。当用户按下非法键(字母)时,我希望目标输入在每个非法按键上闪烁CSS动画。目前看来,它只是激发动画一次,我不知道为什么。

示例:http://codepen.io/anon/pen/oIamG/

任何想法?

1 个答案:

答案 0 :(得分:1)

问题是您需要重置CSS动画。为此,您需要删除动画,然后重新添加。
将-webkit-animation属性移动到输入,如

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();
            }
        });
    }
};