阻止父脚本触发

时间:2014-10-03 17:43:51

标签: javascript jquery dotnetnuke

我有一个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()" />

3 个答案:

答案 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可以通过很多方式介入你的活动,这可能并不容易。

或者您可以创建自己的皮肤,以便控制推到页面上的所有组件,并阻止从包装表单中自动提交。