2011-11-18 4 views
10

<button> 요소가 있는데이 요소 안에 2 <span> 요소가 있습니다. 각 span 요소에 대해 2 개의 jquery click 이벤트 핸들러가 첨부되어 있으므로 각 클릭에 대해 원하는대로 할 수 있습니다. 여기에 기본 코드의 빠른 모습입니다 :jQuery 이벤트 버블 링이 Firefox에서 예상대로 작동하지 않습니다.

HTML은

<button> 
    <span>Text1</span> 
    <span>Text2</span> 
</button> 

자바 스크립트

$(function() { 
    $('button').bind('click', function() { 
     console.log('button clicked'); 
    }); 
    $('button > span:eq(0)').bind('click', function() { 
     console.log('text1 span clicked'); 
    }); 
    $('button > span:eq(1)').bind('click', function() { 
     console.log('text2 span clicked'); 
    }); 
}); 

이 크롬에서 모든 작업 괜찮와 클릭 이벤트가 올바른 순서로 캡처 : 먼저 span 요소 중 하나를 클릭 한 다음 이벤트가 상위 단추 요소까지 거품을냅니다.

문제는 Firefox에서 click 이벤트가 span 요소에 대해 실행되지 않는다는 것입니다. 버튼 이벤트 핸들러는 이벤트가 시작되는 것으로 기록합니다. http://jsfiddle.net/spider/RGL7a/2/

감사

+0

나는 이것이 결코 해결되지 않았을 것으로 생각하고 있습니까? – Shane

+0

@Shane 불행히도 아니, 그리고 내가 본 적이없는 것에서는 이것이 결코 최신 파이어 폭스 버전에서 작동하지 않기 때문에 결코 존재하지 않을 수도 있습니다. 부트 스트랩과 같은 프레임 워크는 [두 개의 개별 버튼] (http://getbootstrap.com/components/#btn-dropdowns-split)을 사용하여 수행합니다. Foundation이나 YUI 같은 다른 프레임 워크는 ** 마크 업 ** 버튼 기능을 시뮬레이션하기 위해 다른 마크 업을 사용합니다 ([Foundation Example] (http://foundation.zurb.com/docs/components/split_buttons.html) 및 [YUI 예제 ] (http://yuilibrary.com/yui/docs/node-menunav/node-menunav-4.html)). – Bogdan

+0

나는 보통 이런 종류의 기능을 위해 Boostrap을 사용한다. 옵션이 아닌 곳에서는 마크 업 시맨틱 측면에서 가장 좋은 전략으로 사용한다. – Bogdan

답변

3

을 간단한 해결책은 버튼 요소 대신 <div> 요소를 사용하는 것입니다 : 당신이 무슨 뜻인지 볼 수 있도록

는 여기에 바이올린입니다. 해고 할 공통 코드를 함수에 넣은 다음 스팬의 고유 코드와 함께 스팬 중 하나를 클릭하면 함수를 실행합니다. 당신이 더 많은 508을 준수하고 싶었다면 당신은 FF의 이벤트 처리 설명하지 않습니다, 분명히. <a> 태그 (또는 <button> 태그에

를 스팬을 만들 수 있지만 갈 수있는 빠른 방법 일 수 있습니다.

+0

Ben에게 제안 해 주셔서 감사합니다. 예, 당신이 말하는 것은 문제에 대한 대안의 해결책입니다. 제가 알고 있고 작동하고 있습니다. 나는 여전히 div 요소 대신에'button' 대신에'button'을 부모 요소로 사용하기를 선호합니다. 왜냐하면 div가있는 것보다 읽기 쉽고 의미 상으로 2 개의 동작 (기본 및 보조)이있는 버튼이 있기 때문입니다. 안으로 2 개의 단추와 더불어. 특히 내 CSS 규칙은 세로 구분 기호로 분리 된 내 정규 (단일 작업) 단추 중 하나로 스타일을 지정하기 때문에 특히 그렇습니다. 어떤 해결책도 찾지 못한다면 나는이 타협안을 작성하고 사업부와 함께 가야 할 것이다. 감사합니다 다시 – Bogdan

-1

<button> to <button type="button"> 

이것은 박쥐 문제를 해결해야 변경해보십시오. 그 이유는 작동하지 자사가 제출하는 버튼의 기본 액션을 통해 다음과 같은 때문이다. 즉, 버튼이 자바 스크립트에서 false를 반환해야 귀하의 클릭을 읽기 위해서입니다. 마치 당신이 out을 false로 반환하는 기본 동작을 설정합니다.

다음 j 줄 코드 줄을 js에 추가하면 문제도 해결됩니다. 버튼> 스팬 클릭 바인딩 전에 코드를 추가해야합니다.

 <script type="text/javascript"> 
     $(function() { 
      $('button').click(function(){ 
       return false 
      }); 
     }); 
    </script>   

희망이 있습니다.

-D

+0

제안 주셔서 감사합니다,하지만 그들 중 누구도 문제를 해결할 수 없습니다 (나는 질문을 게시하기 전에'type = "button"'을 시도했지만 아무런 차이가 없기 때문에 그것을 나의 예제에 포함시키지 않았습니다). 문제는 Firefox에서 click 이벤트는 자식 요소가 아니라 'button'요소에 의해서만 캡처 된 것입니다. – Bogdan