2010-04-13 8 views
3

일부 링크를 포함하여 일부 정보가있는 LI가 있습니다. LI를 클릭 할 수 있도록 jQuery를 원하지만 LI의 링크는 그대로 유지하십시오.LI 내의 클릭 가능한 LI 오버로드 링크

클릭 할 수있는 부분이 작동합니다. 난 그저 일할 수있는 링크가 필요해.
참고 : 마우스 오른쪽 버튼을 클릭하고 "새 탭에서 열기"를 선택하면 작동합니다.

HTML

<ul id="onskeliste"> 
    <li url="http://www.dr.dk">Some info with links <a href="http://www.imerco.dk" target="_blank">Imerco</a></a> 
</ul> 


jQuery를

$(document).ready(function() { 
$("#onskeliste li").click(
function() 
{ 
    window.location = $(this).attr("url"); 
    return false; 
}); 

})(jQuery); 

나는 여기 시뮬 질문을 찾았지만 내 문제를 해결하지 않는 것 같습니다. jQuery DIV click, with anchors

나를 도와 줄 수 있습니까 ??

$("#onskeliste li").bind('click', function(e){ 
    switch(e.target.nodeName){ 
     case 'LI':{ 
      e.preventDefault(); 
      e.stopPropagation(); 
      window.location = $(e.target).attr('url'); 
      break; 
     } 
     case 'A':{ 
      // do something    
      break; 
     } 
    } 
}); 
+0

이것은 나쁜 습관이며 점진적으로 웹 페이지를 향상시키지 않으므로 알 수 있습니다. –

답변

1

event propagation으로 인해 발생한 문제입니다. < a/> 태그를 클릭하면 < li/> 태그가 튀어 나와 li의 click 이벤트가 링크의 클릭을 "거칩니다".

본질적으로, li의 클릭은 링크를 클릭 한 후 즉시이 발생합니다. 마치 한 사이트에 대한 링크를 클릭 한 다음 브라우저가 페이지를 변경할 기회를 갖기 전에 다른 사이트에 대한 링크를 클릭 한 것과 같습니다.
이 솔루션은 이벤트가 < li/>까지 버블 링되는 것을 방지하여 창의 위치를 ​​변경하지 못하도록합니다.

나는이처럼 <에/> 태그를 event.stopPropagation()을 사용하는 것이 좋습니다 :

$('#onskeliste li a').click(function(e) { 
    e.stopPropagation(); 
}); 
+1

이 솔루션은 매력처럼 작동했으며 최소한의 코드 만 사용했기 때문에 이것이 받아 들일 수있는 해결책입니다. :-) –

3

를 사용하여 이벤트 대상을 주셔서 감사합니다?

<ul id="onskeliste"> 
    <li> 
     <a href="http://www.dr.dk">Some info with links</a> 
     <a href="http://www.imerco.dk" target="_blank">Imerco</a></a> 
    </li> 
</ul> 
+0

앤디를 일하게 할 수 없습니다. "case 'div'는 무엇을합니까? "window.location = $ (this) .attr ("url ");" "무언가를"쓴 곳? 위와 같이 내 정보를 삽입하여 아이디어를 잘 보여줄 수 있습니까? –

+0

나는 실제로 그것을 이미했다. 'DIV'부분을 제거 할 수 있습니다. 'nodeName'에는 DOM 요소가 포함될 수 있습니다.흥미로운 부분은 'A'클로저입니다. 일을해야합니다. – jAndy

+0

Doh, 사실 처음에는 이해하지 못했습니다. 지금 트릭을해야하는 코드를 편집했습니다. 그러나 사용자 정의 속성 태그를 사용하면 문제가 발생할 수 있으므로 조심하십시오. – jAndy

0

방금이 최대 마크를 변경하고이를 위해 JS를 쓸 수 없습니다 : :-)

처럼 ... 사전에

0

@GeReV 말했듯이, 그것은 이벤트 전파입니다.

$(document).ready(function() { 
    $('#onskeliste li').click(function(e) { 
    if ($(e.target).is(':not(a)')) { 
     window.location = $(this).attr('url'); 
     return false; 
    } 
    }); 
})(jQuery); 

이것은 당신이 클릭 무엇을보고는 목록 요소에 url 속성에 보이는 링크 아니라면. 그것이 링크라면 그것은 정상 링크 일을합니다.

관련 문제