0

元の onclick イベントが発生する前に別の関数を呼び出す必要があります。次の解決策にたどり着く前に、さまざまなパスを試しました。

function bindEnableFieldToAllLinks() {
    var links = document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        var onclick = link.getAttribute('onclick');
        link.onclick = new Function("if(linkClickHandler()){"+onclick+"}");
        console.log(link.getAttribute('onclick'));
    }
}

これはfirefoxとchromeでトリックを行いますが、IE8は奇妙な動作をしています。onclick変数にある関数が実行されていないようです
。ifステートメントがtrueの後に発生するconsole.logメッセージをすでに追加しました。次の onclick 属性を出力します。

LOG: function anonymous() {
if(linkClickHandler()){function onclick()
{
if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('hoedanigheidForm'),      {'hoedanigheidForm:j_id_jsp_443872799_27':'hoedanigheidForm:j_id_jsp_443872799_27'},'');}return false
}}
}

したがって、関数はリンクのonclickにあり、古いonclick関数も同様にあるようです。
誰でもこれで私を助けてくれますか?

ありがとう

4

2 に答える 2

1

linkClickHandlerこれは、最初に内部にあるものを実行し、次にonclickイベントを実行して、あなたが望むことを行います。再利用できるように、基本的なクロス ブラウザー イベント サブスクライブ機能を追加しました。

bindEnableFieldToAllLinks();    

function bindEnableFieldToAllLinks() {
    var links = document.getElementsByTagName('a');
    for (var i = 0; i < links.length; i++) {
        var link = links[i];
        var onclick = link.getAttribute('onclick');
        onEvent(link, 'click', function() { 
            linkClickHandler(onclick);
        });
        link.onclick = undefined;
    }
}

function onEvent(obj, name, func) {
    if (obj.attachEvent) obj.attachEvent('on' + name, func);
    else if (obj.addEventListener) obj.addEventListener(name, func);    
}
function linkClickHandler(funcText) {
    alert('before');
    var f = Function(funcText);

    f();
    return true;
}

jsフィドル

于 2013-07-09T13:22:28.780 に答える