html - preventDefault 和 stopPropagation 不允许更改 div 的 css 属性

标签 html css angularjs touchscreen

我在触摸屏上工作,从 div 上的 onclick 更改为 touchstart,以便点击速度很快。但问题是,当我触摸 div 事件时使用这种方式工作速度很快,但更改背景颜色的 css 属性现在不起作用。这是我的代码:

<div class="numpad" id="numpad" align="center">
    <div style="display:flex;">
        <kbd touchpad="call(1)">1
            <div class="background">&nbsp;</div>
        </kbd>
        <kbd touchpad="call(2)">2
            <div class="background">ABC</div>
        </kbd>
        <kbd touchpad="call(3)">3
            <div class="background">DEF</div>
        </kbd>
    </div>

Angular Directive(指令):

angular.module('myApp').directive('numpad', function($log) {
    return {
        restrict: 'E',
        templateUrl: 'html/directives/numpadOpenr.html',
        require: 'ngModel',
        link: function(scope, elem, attrs, ngModel) {

            scope.number = ngModel;

            scope.call = function(number) {
                var value = scope.number.$viewValue || '';
                scope.number.$setViewValue(value + number);
            };

            scope.remove = function() {
                var value = scope.number.$viewValue || '';
                if (value.length > 0) {
                    scope.number.$setViewValue(value.substring(0, value.length - 1));
                }
            };

        }
    };
});

angular.module('myApp').directive("touchpad", [function () {
    return function (scope, elem, attrs) {
        elem.bind("touchstart click", function (e) {
            e.preventDefault();
            e.stopPropagation();
            scope.$apply(attrs["touchpad"]);
        });
    }
}]);

CSS:

 kbd, .key {
        display: inline-block;
        min-width: 2.2em;
        font: normal .85em "Lucida Grande", Lucida, Arial, sans-serif;
        text-align: center;
        text-decoration: none;
        -webkit-border-radius: 3px;
        -moz-border-radius: 3px;
        -ms-border-radius: 3px;
        -o-border-radius: 3px;
        border-radius: 3px;
        cursor: pointer;
        color: #555;
    }

    kbd[title], .key[title] {
        cursor: help;
    }

    kbd {
        border: 1px solid #c4c6ca;
        padding: 10px 20px;
        background-color: transparent;
        flex:1;
        height: 2.2em;
    }

    kbd:active {
        background: #e6e7e8;
    }

    .numpad kbd {
        margin: 3px;
        font-size: xx-large;
        background-color: #ffffff;
    }

    kbd div.background {
        font-size:x-small;
    }

    .numpad kbd:hover, .numpad kbd:active, .numpad kbd:focus {
        background-color: #dceef7;
    }

有人能告诉我有什么方法可以让 css 小键盘 kbd:active、小键盘 kbd:focus 使用与我使用 e.preventDefault() 和 e.stopPropagation() 相同的策略开始工作吗?

最佳答案

我找到了一个解决方案,它有点难看但有效。如果添加一个有助于禁止进入 onclick 函数调用的超时函数,那么它将起作用。她是一个密码。

 var doubleClickCheck = true;

            scope.call = function(number) {
                if (doubleClickCheck) {
                    var value = scope.number.$viewValue || '';
                    scope.number.$setViewValue(value + number);
                    reset();
                } 
            };

            scope.remove = function() {
                if (doubleClickCheck) {
                    var value = scope.number.$viewValue || '';
                    if (value.length > 0) {
                        scope.number.$setViewValue(value.substring(0, value.length - 1));
                    }
                    reset();
                }
            };

            function reset() {
                doubleClickCheck = false;
                $timeout(function () {
                    doubleClickCheck = true;
                }, 150)
            }

关于html - preventDefault 和 stopPropagation 不允许更改 div 的 css 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52219501/

相关文章:

javascript - WebRTC RTCPeerConnection 未建立

php - 如何在不提交表单的情况下从输入字段获取文件路径?

javascript - 从 html pre 标签下载文本

html - 我怎样才能把这个按钮正确地放在我的段落下面?

用于元或样式表的 HTML5 结束标记/>

html - CSS:如何使用 CSS(无 JavaScript、动态宽度和高度、不更改 HTML)在#header 和#content 之间向上移动#thumbnails?

jquery - 仅在 div 容器内固定位置元素

angularjs - 任何实例的 Angular UI Bootstrap 模式关闭事件

javascript - Angular JS 使用 ng-show 隐藏 Jquery Multiselect 的某些选项

javascript - AngularJs:多个指令要求隔离范围