我有一个DotNetNuke网站。烘焙到DNN代码中的是以下脚本
<script type="text/javascript">
//<![CDATA[
function WebForm_OnSubmit() {
dnn.controls.submitComp.onsubmit();
return true;
}
//]]>
</script>
问题是,我在我的网站上的一个页面上放了一个执行搜索的表单,然后我连接了一个jquery监听器,它说如果按下回车键,则触发我的按钮点击事件。问题是,ALSO上面的父脚本触发了WebForm_OnSubmit()函数,而onsubmit()函数\返回true的任何内容都会导致我的页面只是刷新。
所以,如果有什么我可以这样做&#34;覆盖&#34;或者&#34;防止&#34;那个WebForm_OnSubmit()函数也会触发?
编辑1:回答问题&#34;你的听众如何设置&#34;:
我有一个名为canISearch的函数:
function canISearch() {
if (event.keyCode == 13) {
event.stopPropagation();
$("#btnSearch").click();
}
}
我使用onkeydown属性激活此函数:
<input type="text" id="txtblah" onkeydown="canISearch()" />
答案 0 :(得分:2)
如果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();
}
};
})()
答案 1 :(得分:1)
您的听众如何设置?您应该能够停止事件的传播,以防止它向上移动事件层次结构:
$(".element").keyup(function(e){
e.stopPropagation();
});
答案 2 :(得分:1)
您可以使用monkey patch dnn代码,以便当您的功能出现在页面上时该方法无效:
dnn.controls.submitComp.onsubmit = function() {/*doing nothing, ladida*/};
由于您的修改可能会对其他行为产生影响,因此可能有点苛刻。您可以改为添加一种方法,在相应地路由代码之前检查控件是否具有焦点。这很可能是最简单的黑客攻击。
Brennan建议,你也可以防止事件冒泡。这真的取决于事件的附加方式。如果我没记错,DNN可以通过很多方式介入你的活动,这可能并不容易。
或者您可以创建自己的皮肤,以便控制推到页面上的所有组件,并阻止从包装表单中自动提交。