-1

関数 *file_get_contents* の結果を URL にエコーすることによって、html ページをロードするサーバーを持っています。この後、ユーザーがクリックしたURLを取得したい。私はもう試した:

$result = file_get_contents('http://www.google.com/');

header('Content-Type: text/html; charset=iso-8859-1');

echo $result;

echo '<script type="text/javascript">',
  "Event.observe(document.body, 'click', function(event) {",
  'alert("hi");',
  '});</script>';

しかし、なぜそれが機能しないのかわかりません!

ありがとうございました

4

4 に答える 4

7

次のようなスクリプトが必要です。

(function() {
  function onclick(event) {
    event = event || window.event;
    var target = event.target || event.srcElement;
    if (target.tagName && target.tagName.toLowerCase() === 'a') {
      alert(target.href);
    }
  }

  if (document.body.addEventListener) {
    document.body.addEventListener('click', onclick, false);
  } else if (document.body.attachEvent) {
    document.body.attachEvent('onclick', onclick);
  }
})();

これは、JS ライブラリを使用しなくても IE やその他のブラウザで動作します。

于 2012-06-21T15:46:43.533 に答える
3

イベント委任を使用した提案:

(function()
{
    function callback(e)//IE doesn't pass event object, but we'll fix that
    {
        var target;
        e = e || window.event;//get IE event
        target = e.target || e.srcElement;//IE again
        if (target.tagName !== 'A')
        {
            return true;
        }
        //a link has been clicked, target holds a reference to that link, e is the click event
        alert(target.href);
        //to prevent the link to be followed:
        if (e.preventDefault)
        {// all major browsers, except for ie
            e.preventDefault();
            e.stopPropagation();
            return false;
        }//now IE again:
        e.returnValue = false;
        e.cancelBubble = true;
        return false;//not required to return here
    }

    if (document.body.addEventListener)
    {
        document.body.addEventListener('click',callback,false);
    }
    else
    {
        document.body.attachEvent('onclick',callback);//for IE > 9
    }
})();

このように、1 つのイベント リスナーを 1 つのハンドラーにバインドするだけで、ページの任意の場所でクリックされたすべてのリンクを処理します。特定のリンクのみをブロック/処理したい場合は、それらに個別のクラスを指定し、コールバック関数を次のように編集できます。

if(target.tagName !== 'A')
//add extra check:
if (target.tagName !== 'A' && target.className !== 'handleThisLinkClass')

google JavaScript のイベント デリゲーションは、特にイベント ハンドラーを必要とする要素の大規模なコレクションを処理する場合に、非常に便利な機能です。

于 2012-06-21T15:53:27.173 に答える
1

理解するのはさらに簡単ですが、この方法では多くのフレームワークや cmses に含まれていることが多い JQuery を使用します。

$(function(){
    $('a').click(function(){
        alert(this.href);
    });
});
于 2012-06-21T15:46:08.093 に答える
0

イベントが機能し始めるように、クリック イベントのバインドを解除する必要があります。

<?php
        $result = file_get_contents('http://www.google.com/');
        header('Content-Type: text/html; charset=iso-8859-1');
        echo $result;

        echo '<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>';
        echo '
        <script type="text/javascript">
        $(document).ready(function(){
            $(document).unbind("click").click(function(){ alert("Hi!"); });
            // similarly
            $("a").unbind("click").click(function(){ alert($(this).attr("href")); return false; });
        });
        </script>';
?>
于 2012-06-21T15:45:53.147 に答える