2012-07-19 141 views
5

這是我的html代碼聯JavaScript onclick事件

<a href="#" onclick="return clickHandler()">Hit</a> 

這是我的JavaScript文件

function clickHandler(evt) { 
    var thisLink = (evt)?evt.target:Window.event.srcElement; 
    alert(thisLink.innerHTML); 
    return false; 
} 

但是當我點擊的鏈接命中,它重定向。

回答

8

爲了配合都非常-正確答案一起,發生了什麼事是你內聯,你已經寫了onclick="return runFunction();"

如果你看看那個,什麼它真正做的是要這樣的功能:

var link = document.getElementById("myLink"); 

link.onclick = function() { runFunction(); }; 

看到問題了嗎?我的runFunction被調用時沒有傳入任何事件對象。 ......這意味着var thisLink = (evt) ?將返回false,這意味着它將嘗試在oldIE模式下運行。

通過寫onclick="runFunction",這等於說:

link.onclick = runFunction; 

這意味着當onclick事件發生,runFunction將被調用,並在符合W3C的瀏覽器,它會發送一個事件對象。

這就是解決方案的原因。

避免大量混淆的最佳方法是處理來自JavaScript內部的JavaScript以及處理HTML內部的HTML,以便您不必擔心字符串如何轉換爲代碼。

現在,讓這一切工作,防止重定向,要做到這一點:

爲W3C的瀏覽器(即傳遞事件參數的那些):

function runFunction (evt) { 

    // stops the default-action from happening 
    // means you need to find another way to fire it, if you want to later 
    evt.preventDefault(); 


    // stops higher-up elements from hearing about the event 
    // like if you stop a submit button from "clicking", that doesn't stop the form 
    // from submitting 
    evt.stopPropagation(); 

    //the oldIE versions of both of these are 
    event.cancelBubble = true; 
    event.returnValue = false;  
} 
+0

這意味着沒有事件被傳遞給函數。感謝名單。 – Vicky 2012-07-19 19:34:42

0

當我插你的代碼爲鍍鉻,我得到這個在控制檯中的錯誤: 遺漏的類型錯誤:無法讀取的不確定

財產「srcElement」 IF的JavaScript炸彈的同時處理,它從來沒有得到一個有機會返回,所以瀏覽器往往忽略異常後onclick處理程序中的內容。

因爲它炸燬了......錨定標記的默認行爲,它將您發送到任何需要去的地方。

嘗試將try/catch塊中的函數內容包裝起來,看看如果這種事情困擾你,會發生什麼。

7

你需要如果您希望防止默認通過事件。

HTML:

<a href="#" onclick="runFunction(event)">Hit</a> 

腳本:

function runFunction (evt) { 
    evt.preventDefault(); 
    evt.stopPropagation(); 
}