2012-08-08 11 views
7

나는 특정 요소에 경고를 표시하려면이 코드를 사용하고 있습니다 :요소의 자식에 대한 jQuery 경고 onclick?

$("#resultsBox").click(function (event) { 
    console.log('a'); 
    }); 

가 난 단지 당신이 '#resultsBox'내부 '리'요소를 클릭 할 때 경고를 표시합니다.

나는 이런 식으로 일을하려고 해요 : 이것은 요소의 #resultsBox 구조가

$("#resultsBox li").click(function (event) { 
    console.log('a'); 
    }); 

입니다 : 이것은 어떻게

<div id="resultsBox"> 
    <ul> 
    <li></li> 
    <li></li> 
    </ul> 
</div> 

을 할 수 있는가? 질문 편집 후

+3

무엇이 잘못 되었나요? 작동하지 않습니까? 그것은 .. – elclanrs

+0

그리고? 뭐가 문제 야? 좋은데. – Strelok

+0

그게 효과가있다. 아마도'li' 요소를 동적으로 추가 할 것입니까? 또는 HTML이 유효하지 않아서 어떻게 든 선택기를 망칠 수 있습니까? – jeff

답변

15

그것은 나중이 아니라 동적으로 추가 요소, 그 순간에 당신의 선택 과 일치하는 모든 요소에 적용됩니다.

당신의 사업부는 "resultsBox"라고 감안할 때, 어떤 경우에 당신이 위임 된 이벤트 핸들러를 사용할 필요가, 당신이 실제로 동적으로 다른 작업의 결과를 표시 할 물건을 추가하는 가정하는 것이 합리적 보인다

:

$("#resultsBox").on("click", "li", function (event) { 
    console.log('a'); 
}); 

.on() method의이 구문은 처리기를 "#resultsBox"에 바인딩하지만 클릭이 발생하면 jQuery는 두 번째 매개 변수의 "li"선택자와 일치하는 자식 요소에 있는지 확인합니다. 그렇지 않으면 그렇지 않습니다.

+0

유효합니까? 당신은'li'을 선택하고 두번째 arg에'li'를 넘깁니까? – Jashwant

+0

질문을 편집했으나 내 의견이 유효하지 않습니다.) – Jashwant

+0

죄송합니다, 재촉합니다,하지만 그 오타를 발견하고 제거했습니다. – nnnnnn

0

UPDATE : http://jsbin.com/ocejar/2/edit

그러나 어쨌든, 또한 예를 들어 위 :

<div id="resultsBox"> 
    <ul id="myList"> 
    <li></li> 
    <li></li> 
    </ul> 
</div> 


$("#myList > li").click(function (event) { 

     console.log('a'); 

     }); 
이 같은

Demo

+1

작동하지 않습니다. 'li'는'# resultsBox'의 직계 후손이 아닙니다. – Jashwant

+0

동의하지만이 질문은 질문이 수정되기 전에 추가되었으며 '# resultsBox'의 'li'요소를 클릭하면 표시됩니다. –

+0

언제든지 답변을 수정할 수 있습니다 :) – Jashwant

1

뭔가이 지금 작업을해야

$("#resultsBox").find("li").click(function(){ 
    alert("You clicked on li " + $(this).text()); 
}); 

작동합니다사용잘 작동합니다. here을 참조하십시오. 그러나 $("#resultsBox").find("li")을 사용하면 실적면에서 little faster이되어야합니다. 당신이 그것을 작동해야 가지고

+0

방금 ​​시도했지만 클릭을 잡지 못했습니다. 요소 내용으로 질문을 업데이트 한 것 같습니다. 어쩌면 작동하지 않는 이유 일 수 있습니다. – lisovaccaro

+0

@ Liso22 이에 따라 답변을 수정했습니다 – Juri

+0

질문의 선택자는 이미 #resultsBox의 자손 인 (직접 자식이 아닌) li 요소를 찾는'$ ("# resultsBox li") ... "입니다. 질문의 코드에는'> '이 없습니다. – nnnnnn

0
$("#resultsBox").find('li').click(function (event) { 
    alert($(this).text()); 
    }); 
1

귀하의 코드 : http://jsfiddle.net/GxCCb/

그것의 중요한 요소는 코드가 평가 될 때 존재해야합니다에 이벤트 처리기를 부착하려고하는 점에 유의하십시오. 나중에 추가 할 경우 on() (v1.7 이상) 또는 delegate() (< 1.7)을 사용해야하며,이 경우 이벤트 위임에 사용되며 요소를 나중에 추가하면 참조 할 수 있습니다.

) (에 사용 :

$("#resultsBox").on('click', 'li', function (event) { 
    alert(this.innerHTML); 
    }); 

데모 : http://jsfiddle.net/7Lz2Y/

사용 위임() :

$("#resultsBox").delegate('li', 'click', function (event) { 
    alert(this.innerHTML); 
    }); 

데모 : http://jsfiddle.net/XwYs5/

하지만, 존재하는 요소에 대한 이벤트 핸들러를 부착하기위한 다른 방법이 많이있다 전에 :

$("#resultsBox").find('li').click(function (event) { 
    alert(this.innerHTML); 
    }); 

데모 : http://jsfiddle.net/74Q7p/

$("#resultsBox ul > li").click(function (event) { 
    alert(this.innerHTML); 
    }); 

데모 : http://jsfiddle.net/a28U5/

+0

코드가 실행될 때 존재해야하는 요소에 대해서는 정확하지만 표시되는 두 가지 대체 방법 모두 동일한 문제가 있습니다. – nnnnnn

+0

@nnnnnn - 좋은 점은,'on()'과'delegate()'를 사용하여 예제를 추가하고 설명을 명확히하기 위해 답변을 업데이트했습니다. – RobB

0

일해야 겠어.당신이 .click()에 이벤트 처리기를 바인딩 할 때

$("#resultsBox ul li").click(function (event) { 
    console.log('a'); 
}); 
0

동적으로 추가되는 요소에 대해 작동합니다.

+0

크로스 브라우저입니까? – Jashwant

+0

예, 자바 스크립트로 이벤트를 바인딩하는 동안 event.target은 Internet Explorer에서 식별되지 않습니다. event.srcElement를 검색합니다. 그것은 jQuery에서 완벽하게 처리되었습니다. – Ankur

관련 문제