将事件处理附加到菜单和按钮

时间:2015-01-22 14:40:08

标签: javascript jsp internet-explorer-8

我正在使用IE8。因此请求提供适用于IE8的解决方案。

这个问题已经过时了。我在jsp中有一个很大的形式。用户填写表单。错误地在不可编辑的文本框上按下退格键,输入的数据全部丢失。

为了警告用户,我写了以下代码:

window.onbeforeunload = function() { 
     return "Your work will be lost."; 
}; 

但是,现在此警报也会出现在所有链接,菜单和按钮以及退格键按下,即使页面卸载在这些情况下有效。

我通过在onclick事件上调用函数解决了超链接:

var link_was_clicked = false;

window.onbeforeunload = function() { 
    if(link_was_clicked){
        return;
    }
    return "Your work will be lost."; 
}; 

var elements = document.getElementsByTagName('a');
for(var i = 0, len = elements.length; i < len; i++) {
    elements[i].onclick = function () {
        link_was_clicked = true;
    }
}

这可以按预期工作。

但是,我不知道如何对页面上的菜单和按钮执行相同的操作。

我使用Array作为菜单:

var menus = new Array();
menus[0] = new menu( .. and so on

项目被添加到菜单中:

menus[0].addItem("javascript:loadMyHome();", "", 65, "left", "&nbsp;MyHome", 0);

loadMyHome()已提交:

document.myFormName.submit();

同样,按钮定义为:

<INPUT TYPE="button" value="MyButton"  onClick="funcMyButton()" />

funcMyButton()也提交了:

document.myFormName.submit();

感谢阅读!

2 个答案:

答案 0 :(得分:0)

对于退格键,为什么不包含window.addEventListener("keydown",onKeyDown,false);然后在代码中稍后有函数:function onKeyDown(e) { if(e.keyCode == 8) do blah; 8是退格键的char代码。类似地,如果要对网页的其他元素执行相同操作,请使用对象。例如:Object.Menu1 = document.getElementById('menuId');然后:Object.Menu1.addEventListener("keydown",onKeyDown,false);希望这会有所帮助!

答案 1 :(得分:0)

另一种方法可能是在按下退格键并且当前没有文本字段处于焦点时触发警报。

JS:

window.addEventListener('keydown', function(event){
    if(event.keyCode === 8 && document.activeElement.type !== 'text') {
        event.preventDefault();
        alert('Your work will be lost.');
    }
});

支持IE8(未经测试):

JS:

var _win = window;

if (_win.addEventListener) {
    _win.addEventListener('keydown', showWarning, false);
} else {
    _win.attachEvent('keydown', showWarning);
}

function showWarning(event){
    if(event.keyCode === 8 && document.activeElement.type !== 'text') {
        event.preventDefault();
        alert('Your work will be lost.');
    }
});