阻止父脚本启动
Prevent parent script from firing
我有一个DotNetNuke网站。烘焙到DNN代码中的是以下脚本
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
dnn.controls.submitComp.onsubmit();
return true;
}
//]]>
</script>
问题是,我在我的网站上的一个执行搜索的页面上放了一个表格,然后我连接了一个jquery监听器,它说如果按下回车键,就会触发我的按钮点击事件。问题是,上面的父脚本还触发了WebForm_OnSubmit()函数,而无论OnSubmit(()函数''return true做了什么,都会导致我的页面刷新。
那么,如果我能做些什么来"覆盖"或"防止"WebForm_OnSubmit()函数也触发呢?
编辑1:回答"你的听众设置如何"的问题:
我有一个叫做canISearch:的函数
function canISearch() {
if (event.keyCode == 13) {
event.stopPropagation();
$("#btnSearch").click();
}
}
我使用onkeydown属性启动这个函数:
<input type="text" id="txtblah" onkeydown="canISearch()" />
如果WebForm_OnSubmit在全局空间中,则可以覆盖它并为您的案例创建异常。在定义了原始函数后的某个时间,重新定义它。也许是这样的:
(注:已更新以包含Samy以下回答中的信息)
(function () {
var originalFn = dnn.controls.submitComp.onsubmit;
dnn.controls.submitComp.onsubmit = function() {
if ([your element is in focus]) {
... do your thing ...
} else {
originalFn();
}
};
})()
当您的函数出现在页面上时,您可以对dnn代码进行猴子补丁,以便该方法不执行任何操作:
dnn.controls.submitComp.onsubmit = function() {/*doing nothing, ladida*/};
这可能有点苛刻,因为你的修改会对其他行为产生影响。相反,您可以添加一个方法,在相应地路由代码之前检查控件是否具有焦点。这很可能是最简单的破解方法。
正如布伦南所建议的那样,你也可以阻止事件的爆发;这实际上取决于事件是如何连接的。如果我没记错的话,DNN可以以多种方式侵入你的活动,这可能不容易做到。
或者,您可以创建自己的皮肤,以控制推送到页面上的所有组件,并防止从包装表单自动提交。
如何设置侦听器?您应该能够停止事件的传播,以防止它在事件层次结构中向上移动:
$(".element").keyup(function(e){
e.stopPropagation();
});
相关文章:
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 为什么我的控制器没有启动函数.js脚本
- 启动脚本中的 GATE -Dgate.plugins.home 选项
- 简单的按钮以快速启动脚本
- 在 MVC4 中注册启动脚本
- 如何在响应.redirect之前执行启动脚本
- 未生成电子邮件或未启动脚本
- 无法注册启动脚本
- 在启动脚本之前显示loading.gif
- 在滚动和最大宽度上启动脚本
- 节点在启动脚本上运行失败
- 如何在meteor mupx启动脚本中添加命令?
- 使用返回键启动脚本
- 瞄准类内部的类,启动脚本- Javascript/jQuery
- 是否有一种方法可以在ajax响应后启动脚本
- 我怎么能执行一些Javascript毕竟ASP.. NET启动脚本已执行
- 有一个NodeJS CLI的启动脚本
- InDesign启动脚本未从XML导入加载图像时出现问题
- Javascript 如何在确切的时间启动脚本
- 在控制器将数据发送到jsp之后,如何启动脚本