2010-07-30 5 views
2

후,이 같은 라벨 내부에 랩 링크, 주어 졌어하지 : 사용자가 모든 브라우저에서 링크를 클릭하면화재 다음 이벤트까지,하지만 페이지에 대한 그

<label for='checkbox_elem'> 
    Links to <a href='somepage.php' target='anotherwindow'>another page.</a> 
</label> 

을의 페이지가 구상 된 새 탭에 생성되지만 Firefox에서는 레이블에 연결된 확인란도 선택됩니다. 이것은 바람직하지 않은 행동입니다.

링크를 허용하려면 일부 jQuery를 실행하고 그 이후에는 이벤트를 종료하고 싶습니다.

$(document).ready(function(){ 
    $('label a').click(function(e){ 
     open($(this).attr('href'), $(this).attr('target')); 
     return false; 
    }); 
}); 

당신의 수동 소자의 동작을 복제하고 이벤트를 죽일 이보다을 할 수있는 더 우아한 방법을 생각할 수 : I 작품,하지만 매우 우아 다음을 가지고? 여담으로


, 나는 stopPropagation 승/노력했습니다,하지만 많은 성공이 없었어요.

또한,하지 위의 솔루션은 작동 있습니다,하지만 일반적으로 자신의 첫 번째 호출 과거의 전파 이벤트를 중지하는 더 우아한 뭔가 을 찾고하시기 바랍니다. (첫 번째 네이티브 호출. 콜백을 추가하면 여전히 네이티브 요소 동작이 발생하지만 부모 요소는 실행되지 않도록해야합니다.

<label for='checkbox_elem'>Links to </label> 
<a href='somepage.php' target='anotherwindow'>another page.</a> 

더 자바 스크립트를 사용하지 : http://api.jquery.com/one/

+1

. 계속 진행하십시오 ... –

답변

1

은 전파 이벤트를 중지하십시오,이 같은 라벨 외부 링크를 이동할 수 있습니다 라벨. 이것은

$(document).ready(function(){ 
    $('label').click(function(e){ 
     e.stopPropagation(); 
    }); 
}); 
0

글쎄, 당신은 클라이언트 측에서 HTML을 변경할 수 있습니다, 당신은 항상

$(document).ready(function(){ 
    $('label').find('a').each(function(){ 
     var $anchor = $(this);   
     $(this).closest('label').after($anchor); 
    }); 
});​ 

demo

+0

나는이 접근법을 실제로 좋아한다. (더 복잡한 것은 있지만 일반적으로 실행 가능하다.) 그런데 문제를 해결하기 위해 HTML을 재 작성하는 것이 더 우아 할 지 모르겠다. –

+0

솔직히 다른 접근법을 생각할 수 없습니다 ... 왜냐하면 당신이 말했듯이, 당신은 HTML 소스의 아무런 통제력이 없습니다 ... – Reigel

0

:

<label> test <a href="#">Test</a> <input type="checkbox" name="check[]" /></label> 

심지어 :

<label for="test1"> test <a href="#">Test</a> <input type="checkbox" name="test1" id="test1" class="checkbox" /></label> 

그리고 JS : 나를 위해

$('a').click(function(e){ 
    var t=$(this); 
    window.open(t.attr('href'), t.attr('target')); 
    return false; 
}); 

작품. 어쩌면 당신의 대본에 방해가되는 얼룩이 있을까요?.one() 대신 .click()의를 사용하여

+0

나는 window.open을 사용할 수있다. 그러나 그것은 꽤 명확한 오버라이드와 예쁜 kludgy이다. 내 질문의 목적은 이미 가지고있는 해킹보다는 문제에 대한 우아한 해결책이 있는지 확인하는 것입니다. –

+0

Oups, 나는 '더 우아한 방법'으로 파트를 얻지 못했습니다 : D하지만, '링크를 사용하여'위치 : 절대 '로 플레이하면 어떨까요?하지만 나는 이것보다 더 못 생겼다고 생각합니다. –

0

시도 :

$(document).ready(function(){ 
    $('label a').one(function(e){ 
     open($(this).attr('href'), $(this).attr('target')); 
     return false; 
    }); 
}); 
+0

이것은 게시 한 코드와 동일하지만 사용자가 처음 레이블을 클릭하는 것을 방지합니다. one() 함수는 유감스럽게도이 목적에 적합하지 않습니다. –

0

KISS 충분히 우아한

$(document).ready(function(){ 
    $('label a').click(function(e){ 
     open($(this).attr('href'), $(this).attr('target')); 
     $(this).parent().click(); //Click the label again to reverse the effects of the first click. 
     return false; 
    }); 
}); 
관련 문제