0

href リンクをプログラムで (ajax 非同期操作の結果に従って) 変更し、新しいウィンドウで開こうとしています (ポップアップのように動作し、IE でブロックされているため、window.open を使用したくありません)。 )。

次のコードは、リンクを手動で 2 回クリックした後にのみ機能します。最初のクリックで機能させるにはどうすればよいですか?

簡単な例:

    <a href="http://demo.com" id="link">trying to change href link dynamically</a>

    <script type="text/javascript">
            document.getElementById('link').addEventListener("click", function (e) {

                if (!e.target.hasAttribute("target")) //only preventDefault for the first time..
            {
                    e.target.setAttribute("target", "_blank");
                    e.preventDefault();
                    updateLink();
                    }
            });

            function updateLink() {
// --HERE I PERFORM AN AJAX CALL WHICH TAKES A WHILE AND BY ITS RESULT I DECIDE WHICH URL TO USE - BUT HERE I JUST USE IT HARDCODED--
                document.getElementById('link').setAttribute("href", "http://google.com");
                document.getElementById('link').click();
            }
4

1 に答える 1

1

この jsFiddle でコードを整理しました: http://jsfiddle.net/mswieboda/Hhj4D/

JavaScript:

var $link = document.getElementById('link');
$link.addEventListener("click", function (e) {
    if (!e.target.hasAttribute("target")) {
        //only preventDefault for the first time..
        e.target.setAttribute("target", "_blank");
        e.preventDefault();
        updateLink();
    }
});

function updateLink() {
    $link.setAttribute("href", "http://google.com");
    $link.click();
}

これは、実行したときにうまくいきました。リンクにカーソルを合わせると表示されますhttp://demo.comが、クリックすると に移動しますhttp://google.com。これは望ましい機能ですか?updateLink 関数をいつでも (AJAX 呼び出しの後) 使用して を変更hrefできます。また、その関数で を設定することもできますが、_targetその方が理にかなっています。

于 2013-10-01T16:48:59.157 に答える