Làm cách nào để event.srcElement hoạt động trong Firefox và nó có nghĩa là gì?


80

có một câu lệnh if trên trang web của công ty tôi khiến một trang web không tương thích với firefox

if(event.srcElement.getAttribute("onclick") == null){ 
...code..
document.mainForm.submit();
}

Tôi đã nhận xét ra các điều kiện câu lệnh if và bây giờ nó đang hoạt động với forefox. Câu hỏi của tôi là event.srcElement.getAttribute ("onclick") là gì, nó có quan trọng không, nó có gây ra sự cố trong tương lai không. Ngoài ra, có một cái gì đó tương tự tôi có thể thay thế điều kiện để nó hoạt động trên firefox không?

Biên tập:

 function gotoRDManagerPT(PTId, bDDetailId) {
        if(!proceed()) return false;
        var target = event.target || event.srcElement; 
        if(event.target.getAttribute("onclick") == null) { 
            document.mainForm.displayRDManagerPT.value = "true";
            document.mainForm.PTId.value = PTId;
            document.mainForm.bDDetailId.value = bDDetailId;
            document.mainForm.submit();
        }
    }

2
Tìm kiếm nhanh trên Google cho "event.srcElement" đã đưa ra lời giải thích và giải pháp này .
Các cuộc đua ánh sáng trong quỹ đạo vào

Câu trả lời:


172

srcElementlà tài sản độc quyền ban đầu đến từ IE. Thuộc tính tiêu chuẩn hóa là target:

var target = event.target || event.srcElement;

if(target.onclick == null) { // shorter than getAttribute('onclick')
    //...
    document.mainForm.submit();
}

Ngoài ra, hãy xem quirksmode.org - Thuộc tính sự kiện để biết thêm thông tin về trình duyệt.


Về câu hỏi nó đang làm gì:

event.target/ event.srcElementchứa một tham chiếu đến phần tử eventđược nâng lên. getAttribute('onclick') == nullkiểm tra xem trình xử lý sự kiện nhấp chuột có được chỉ định cho phần tử thông qua xử lý sự kiện nội tuyến hay không .

Nó quan trọng? Chúng tôi không thể nói bởi vì chúng tôi không biết những gì ...code..đang làm.


Cảm ơn vì lỗi đó, tuy nhiên tôi vẫn gặp lỗi javascript "sự kiện không được xác định [Break On This Error] var target = window.event.target || event.srcElement;" bất kỳ ý kiến ​​nào tại sao không?
code511788465541441 14/03

1
@ user521180: Trong tất cả các trình duyệt khác, sự kiện không có sẵn thông qua đối số windownhưng được truyền dưới dạng đối số đầu tiên cho trình xử lý sự kiện. Vì vậy, bạn cần một cái gì đó như thế nào function yourHandler(event) { event = event || window.event; var target = event.target || event.srcElement; ...}. Hoặc đăng mã nơi chứa mã này nếu bạn cần thêm trợ giúp.
Felix Kling

Tôi đã eddited bài ban đầu của tôi để bao gồm toàn bộ chức năng
code511788465541441

1
@FelixKling Tôi nghĩ hiện tại không chỉ được hỗ trợ từ FF Event.srcElement
Alex Char

1
Điều này nên được cập nhật. Bạn nói đúng, @FelixKling. Event.srcElement hiện chỉ không được hỗ trợ trong firefox. developer.mozilla.org/en-US/docs/Web/API/Event/srcElement
SlimPDX

5

Trong IE đối tượng sự kiện đã có sẵn trong đối tượng cửa sổ rồi; trong Firefox, nó được chuyển như một tham số trong trình xử lý sự kiện.

Thí dụ

JavaScript:

function toDoOnKeyDown(evt)

{

    //if window.event is equivalent as if thie browser is IE then the event object is in window
    //object and if the browser is FireFox then use the Argument evt

    var myEvent = ((window.event)?(event):(evt));
    //get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    //To Do -->

}

HTML:

<input type="text" id="txt_Name" onkeydown="toDoOnKeyDown(event);"/>

Như bạn nhận thấy khi chúng tôi gọi hàm bên trong html, chúng tôi đã thêm một tham số eventchỉ trong trường hợp trình duyệt là Firefox.

Tôi đã đọc trong một bài báo rằng đối tượng sự kiện trong IE được gọi window.eventvà trong Firefox, chúng tôi phải đặt nó như một tham số.

Trong trường hợp bạn cần nó được đính kèm trong mã:

document.getElementById('txt_Name').onkeydown = function(evt) {
    var myEvent = ((window.event)?(window.event):(evt));


    // get the Element which this event is all about 

    var Element = ((window.event)?(event.srcElement):(evt.currentTarget));
    // To Do -->
};

1
Cám ơn Edit iam chỉ mới đây :) thanxs lại
Marwan

Điều gì sẽ xảy ra nếu bạn đã chuyển một giá trị khác vào hàm này? Bạn chỉ cần thêm "evt" làm tham số thứ hai? Làm thế nào để Javascript biết được tham số nào là đối tượng sự kiện? Nó có phải là tham số đầu tiên không? hay cuối cùng?
Vincent

0

Hãy thử khắc phục nhanh như sau:

Bao gồm trong mã:

let target = event.target || event.srcElement;

và thay đổi

event.srcElement.XXXXX to target.XXXXX

điều này giải quyết vấn đề với Firefox.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.