如何停止模式中所有控件的传播
How to stop propagation in all controls in a modal
因为我发现 angularjs 和 bootstrap 中模态的缓存很烦人,所以我找到了这篇文章“$modal caching”来将一种版本添加到 url 模态并以这种方式避免缓存模态内容的新更改,但是因为当我单击按钮打开模态或模态内的任何控件时我这样做了我总是得到这个脚本错误
Uncaught TypeError: Cannot read property 'toLowerCase' of undefined at ih.js:223
来自第 223 行的 jquery-3.1.0 库。
打开编辑部门的按钮(我的)
$scope.editDepartment = function(id){
var uibModalInstance = $uibModal.open({
templateUrl : '../webproject/modal_department.html?bust=' + Math.random().toString(36).slice(2),
controller : 'DepartmentModalController',
scope: $scope
});
return uibModalInstance.result.then(function(department){
$scope.department = department;
});
}
jQuery 来自 jQuery 库的方法产生错误
Messaging.prototype.addEventListener = function() {
var func,
_this = this;
func = function(evt) {
return _this.receiveMessage(evt);
};
if (this.window.addEventListener) {
this.window.addEventListener("click", function(event) {
var target = event.target;
while (target && target.tagName.toLowerCase() !== 'a') {
target = target.parentNode;
if (!target) { return; }
}
var url = target.href;
if(url.indexOf('afsrc=')>-1||url.indexOf('jdoqocy.com')>-1||url.indexOf('kqzyfj.com')>-1||url.indexOf('tkqlhce.com')>-1||url.indexOf('anrdoezrs.net')>-1||url.indexOf('dpbolvw.net')>-1) {
chrome.extension.sendRequest({action:"suppressToolbar"});
}
});
return this.window.addEventListener("message", func, false);
} else if (this.window.attachEvent) {
return this.window.attachEvent("onmessage", func);
}
};
我调试了代码,从我单击按钮打开模态的那一刻起,在我的模态中的保存按钮上,或任何其他控件(如简单的复选框或单选按钮)上,它都会转到此代码来自 Jquery while (target && target.tagName.toLowerCase() !== 'a')
并且我认为(如果我错了请纠正我)正在发生冒泡。它开始评估包含控件的所有 HTML 元素,直到到达没有 属性 标记名的元素 #document 并生成错误。
我开始在所有控件上放置 onclick="event.stopPropagation();"
效果很好,但我开始从模态污染所有控件。
有没有办法阻止所有内部控件从模态或代码中传播以打开模态,或者我可以停止从 CSS 冒泡吗?
编辑
该错误是由于我最近安装了一些 chrome 扩展。我卸载它们并重新启动浏览器,问题就消失了。
用更具体的答案扩展您的编辑。
是的,这是一个 Chrome 扩展导致的问题:InvisibleHand。
如果你查看那个 ih.js
文件,你会看到到处都是引用 invisiblehand
。
因为我发现 angularjs 和 bootstrap 中模态的缓存很烦人,所以我找到了这篇文章“$modal caching”来将一种版本添加到 url 模态并以这种方式避免缓存模态内容的新更改,但是因为当我单击按钮打开模态或模态内的任何控件时我这样做了我总是得到这个脚本错误
Uncaught TypeError: Cannot read property 'toLowerCase' of undefined at ih.js:223
来自第 223 行的 jquery-3.1.0 库。
打开编辑部门的按钮(我的)
$scope.editDepartment = function(id){
var uibModalInstance = $uibModal.open({
templateUrl : '../webproject/modal_department.html?bust=' + Math.random().toString(36).slice(2),
controller : 'DepartmentModalController',
scope: $scope
});
return uibModalInstance.result.then(function(department){
$scope.department = department;
});
}
jQuery 来自 jQuery 库的方法产生错误
Messaging.prototype.addEventListener = function() {
var func,
_this = this;
func = function(evt) {
return _this.receiveMessage(evt);
};
if (this.window.addEventListener) {
this.window.addEventListener("click", function(event) {
var target = event.target;
while (target && target.tagName.toLowerCase() !== 'a') {
target = target.parentNode;
if (!target) { return; }
}
var url = target.href;
if(url.indexOf('afsrc=')>-1||url.indexOf('jdoqocy.com')>-1||url.indexOf('kqzyfj.com')>-1||url.indexOf('tkqlhce.com')>-1||url.indexOf('anrdoezrs.net')>-1||url.indexOf('dpbolvw.net')>-1) {
chrome.extension.sendRequest({action:"suppressToolbar"});
}
});
return this.window.addEventListener("message", func, false);
} else if (this.window.attachEvent) {
return this.window.attachEvent("onmessage", func);
}
};
我调试了代码,从我单击按钮打开模态的那一刻起,在我的模态中的保存按钮上,或任何其他控件(如简单的复选框或单选按钮)上,它都会转到此代码来自 Jquery while (target && target.tagName.toLowerCase() !== 'a')
并且我认为(如果我错了请纠正我)正在发生冒泡。它开始评估包含控件的所有 HTML 元素,直到到达没有 属性 标记名的元素 #document 并生成错误。
我开始在所有控件上放置 onclick="event.stopPropagation();"
效果很好,但我开始从模态污染所有控件。
有没有办法阻止所有内部控件从模态或代码中传播以打开模态,或者我可以停止从 CSS 冒泡吗?
编辑
该错误是由于我最近安装了一些 chrome 扩展。我卸载它们并重新启动浏览器,问题就消失了。
用更具体的答案扩展您的编辑。
是的,这是一个 Chrome 扩展导致的问题:InvisibleHand。
如果你查看那个 ih.js
文件,你会看到到处都是引用 invisiblehand
。