2013-11-02 3 views
1

기본 질문 :이 경고가 정의되지 않은 이유는 무엇입니까?onmouseover 요청시 ID가 정의되지 않았습니다.

HTML

<div id="spettacoli_div"> 
<img id="spettacoli" src="grafica/spettacoli.png" onMouseOver="spettacoliIn()"> 
</div> 

JS

function spettacoliIn(){ 
var comparendo = $(this).attr('id'); 
alert(comparendo); 

}

+0

감사합니다! 이상한 내가 읽은 자바 스크립트 가이드에서 그런 문제를 찾지 못했습니다! – Sugnasugna

답변

0

기능이 컨텍스트 (this)를 호출 할 때 전역 객체 (window)와 동일하기 때문에

에 spettacoliIn 방법을 변경

window는 ID를 가지고 있지 않습니다. 대신이의

<img id="spettacoli" src="..." onMouseOver="spettacoliIn.call(this)"> 

당신은 마우스 오버 이벤트에 대한 인라인 핸들러로 사용하는 코드는 올바른 컨텍스트 (this는 이미지 요소)로 실행되지만이 자동으로 전송하지 않습니다 핸들러 자체를 호출합니다 (즉, spettacoliIn 호출). 컨텍스트를 명시 적으로 전파하려면 call을 사용해야합니다.

+0

고맙습니다. 이것은 내 목적에 매우 잘 맞는다. – Sugnasugna

0
<div id="spettacoli_div"> 
<img id="spettacoli" src="grafica/spettacoli.png" onMouseOver="spettacoliIn(this)"> 
</div> 

작동합니다. onMouseOver는 jQuery에 현재 DOM 요소에 대한 정보를 제공하지 않습니다.

function spettacoliIn(domElem){ 
    var elem = $(domElem); 
    var comparendo = elem.attr('id'); 
    alert(comparendo); 
} 
0

thiswindow입니다.

onMouseOver="spettacoliIn.call(this)" 
: 당신이 정말로 인라인 이벤트를 사용하려면 속성 당신은 this 이 요소 때문에 그 시점에서 당신이 onMouseOver 내부에서 할 수있는 함수를 호출 할 때 DOM 요소에 명시 적으로 this을 설정해야 할 것

하지만 당신은 jQuery를 사용하고, 왜 jQuery로 핸들러를 바인딩 할 다음 this는 문제의 요소에 자동으로 설정됩니다 : 함수가 윈도우 이달에 의해 호출되고 있기 때문에

$("#spettacoli").on("mouseover", function(e) { 
    var element = $(this); 
    // do something 

}); 
1

그게 전부 요소의 ead. 매개 변수를 전달하거나 이벤트 매개 변수를 잡으십시오.

function spettacoliIn (e) { 
    // catch the event parameter 
    var comparendo = (e || window.event).target.id; 
    alert(comparendo); 
} 
관련 문제