【问题标题】:Inprog Action Already In Progress caused by jquery.blur()由 jquery.blur() 引起的 Inprog 操作已经在进行中
【发布时间】:2025-12-22 19:45:10
【问题描述】:

我有input field:

<input type="text" id="myId" ns-validate="" class="someClass" ng-model="Date" ng-
focus="focus($event, 'Parameters')" ng-blur="blur($event)" tabindex="-1">

焦点事件绑定到这个方法:

scope.focus = function (e, names) {
            scope.dateSet = false;
            $(e.currentTarget).blur();
            $(e.currentTarget).prop('readonly', true).addClass('focus');
        };

如果我注释掉 blur() 不会发生错误,但需要使只读在 IE 上工作。

可能是由于这个导致模糊事件绑定到这个方法:

scope.blur = function (e) {
            $(e.currentTarget).prop('readonly', false).removeClass('focus');
        };

如果是,为什么这在 IE 中有效但在 Chrome 中失败?

按照 cmets 中的建议,我尝试创建一个指令:

angular.module('xxx').directive('blurChecker', function () {
return function (scope, element, attributes) {
        scope.$watch(attributes.blurChecker, function(){
            element[0].blur();
    })
};
});

添加到 html

blurChecker='true'

没有任何影响。有什么想法吗?

【问题讨论】:

  • HTML ng-blur="blur($element)" JS: scope.blur = function (ele) { ele.prop('readonly', false).removeClass('focus'); };
  • sry 不工作。对象没有道具
  • 然后使用指令做同样的事情..你会得到一个更好的 DOM 控制器..

标签: javascript jquery angularjs events angularjs-directive


【解决方案1】:

始终从指令进行 DOM 操作。这将更好地控制您想要操作的 DOM。

在指令中使用链接功能。因为您还需要更新范围变量。然后将模糊和焦点事件绑定到链接函数中的元素。 当您在焦点上传递“参数”字符串时。你可以通过在元素中提及属性来做同样的事情,比如parameter="Parameters"

HTML

<input type="text" id="myId" ns-validate="" class="someClass" ng-model="Date" 
blur-checker parameter="Parameters" tabindex="-1">

指令

angular.module('tpmobile').directive('blurChecker', function() {
    return {
        restrict: 'A',
        link: function(scope, element, attrs) {
            var parameterName = attrs.parameter; //I don't know what it does here, but you can get parameter name here
            element.on('blur', function(event) {
                element.prop('readonly', false).removeClass('focus');
            });
            element.on('focus', function(e) {
                scope.dateSet = false;
                element.blur();
                element.prop('readonly', true).addClass('focus');
            })
        }
    }
});

希望这可以帮助你。谢谢。

【讨论】: