2012-07-19 22 views
5

onclick Đây là mã html của tôiinline javascript kiện

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

Đây là tập tin javascript tôi

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

Nhưng khi tôi nhấp vào liên kết Hit, nó chuyển hướng.

Trả lời

8

Để buộc cả các câu trả lời rất-đúng với nhau, những gì đang xảy ra là bạn đã inlined một chức năng mà bạn đã viết onclick="return runFunction();"

Nếu bạn nhìn vào đó, những gì nó thực sự làm đang diễn ra như thế này:

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

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

Xem sự cố?

Hiện tại, số runFunction của tôi đang được gọi mà không có bất kỳ đối tượng sự kiện nào được chuyển vào. ... có nghĩa là var thisLink = (evt) ? sẽ trả về false, có nghĩa là nó sẽ cố gắng chạy trong chế độ oldIE.

Bằng cách viết onclick="runFunction", đó là giống như nói:

link.onclick = runFunction; 

Có nghĩa là khi sự kiện onclick xảy ra, runFunction sẽ được gọi, và trong các trình duyệt W3C tuân thủ, nó sẽ được gửi một đối tượng sự kiện.

Đó là lý do giải pháp đó hoạt động.

Cách tốt nhất để tránh nhiều nhầm lẫn này là xử lý JavaScript từ bên trong JavaScript và để xử lý HTML bên trong HTML, để bạn không phải lo lắng về cách chuỗi dịch thành mã.

Bây giờ, để có được tất cả điều này để làm việc, và ngăn chặn chuyển hướng, bạn muốn làm điều này:

cho các trình duyệt W3C (những cái mà vượt qua các tham số sự kiện):

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

Điều đó có nghĩa không có sự kiện được truyền cho hàm. Thanx. – Vicky

0

Khi tôi cắm mã của bạn vào chrome, tôi nhận này là lỗi trong giao diện điều khiển: lỗi chưa gặp: Không thể đọc thuộc 'srcElement' không xác định

NẾU những quả bom javascript ra trong khi xử lý, nó không bao giờ nhận được một cơ hội để trở lại ở tất cả để trình duyệt có xu hướng bỏ qua những gì có trong handler onclick sau khi ngoại lệ.

Vì nó bị đánh bom ... hành vi mặc định của các thẻ neo, là để gửi bạn đến bất cứ nơi nào href nói.

Hãy thử gói nội dung của hàm trong khối thử/nắm bắt và xem điều gì sẽ xảy ra nếu loại nội dung này gây tai họa cho bạn.

7

bạn cần để vượt qua sự kiện nếu bạn muốn ngăn chặnDefault.

html:

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

kịch bản:

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