2009-06-19 62 views
23

Mục tiêu của tôi là thay đổi thuộc tính "onclick" của liên kết. Tôi có thể làm điều đó thành công, nhưng liên kết kết quả không hoạt động trong ie8. Nó hoạt động trong ff3.Làm thế nào để đặt thuộc tính OnClick với giá trị chứa hàm trong ie8?

Ví dụ: tính năng này hoạt động trong firefox3, nhưng không phải ie8. Tại sao???

<p><a id="bar" href="#" onclick="temp()">click me</a></p> 

    <script> 

    doit = function(){ 
     alert('hello world!'); 
    } 
    foo = document.getElementById("bar"); 
    foo.setAttribute("onclick","javascript:doit();"); 

    </script> 
+3

là gì dòng "javascript: alert ('hello world');" tất cả về? – Hugoware

+0

ý tưởng trong việc không xác định thuộc tính "loại" của thẻ tập lệnh và sử dụng javascript làm khai báo lớp hay gì đó như thế này? – backslash17

+0

hãy để tôi sửa lỗi đó ... – edt

Trả lời

50

Bạn không cần phải sử dụng setAttribute cho rằng - Mã này hoạt động (IE8 cũng)

<div id="something" >Hello</div> 
<script type="text/javascript" > 
    (function() { 
     document.getElementById("something").onclick = function() { 
      alert('hello'); 
     }; 
    })(); 
</script> 
+2

tại sao lại đóng nó? không có lý do gì để tôi có thể nhìn thấy. –

+0

Tại sao viết một chức năng riêng biệt để cảnh báo ('hello world')? :) - Nó phụ thuộc vào những gì bạn đang làm, một đóng cửa sẽ là IMO tốt hơn nếu bạn không có kế hoạch gọi nó từ những nơi khác. – Hugoware

+5

trong trường hợp đó, không cần chức năng hoặc đóng cửa. chỉ là document.getElementById ("cái gì đó"). onclick = function() {alert ('hello'); }; mà không có phần còn lại của nó –

7

đặt cược tốt nhất của bạn là sử dụng một khuôn khổ javascript như jquery hoặc nguyên mẫu, nhưng, thất bại đó, bạn nên sử dụng:

if (foo.addEventListener) 
    foo.addEventListener('click',doit,false); //everything else  
else if (foo.attachEvent) 
    foo.attachEvent('onclick',doit); //IE only 

chỉnh sửa:

cũng có, chức năng của bạn là một chút tắt. nó phải được

var doit = function(){ 
    alert('hello world!'); 
} 
+0

Điều đó có tác dụng nhưng tôi đang cố ghi đè sự kiện onclick trong đó thuộc tính và giá trị onclick được thêm vào thẻ liên kết. Tôi không có quyền truy cập để thay đổi thẻ neo, vì vậy tôi cần phải làm điều đó với JavaScirpt. – edt

+1

addEventListener và attachEvent là cách tốt hơn để thêm các sự kiện vào các phần tử DOM (bao gồm các thẻ liên kết). chúng là các phương pháp không phô trương để thêm số lượng sự kiện tùy ý vào phần tử, ngược lại, chỉ cho phép một sự kiện và dễ bị lỗi hơn (ví dụ: các kịch bản khác thay đổi thuộc tính) –

5

Bạn cũng có thể thiết lập onclick để gọi chức năng của bạn như thế này:

foo.onclick = function() { callYourJSFunction(arg1, arg2); }; 

Bằng cách này, bạn cũng có thể chuyển đối số. .....

1

Bạn cũng có thể sử dụng:

element.addEventListener("click", function(){ 
    // call execute function here... 
}, false); 
Các vấn đề liên quan