2013-03-12 2 views
0

기본적으로 배경 이미지가있는 큰 하이퍼 링크 요소가 있습니다. 사용자가이 버튼을 가리키면 하이퍼 링크에 대한 일부 내용을 편집 할 수있는 입력 양식을 팝업하는 편집 버튼이 나타납니다.하이퍼 링크 노드의 모든 하위 요소도 링크됩니까?

예를 들어 사진 앨범을 찍습니다. 표지 사진과 이름으로 모든 사용자의 사진 앨범을 표시합니다. 사진 앨범을 클릭하면 해당 앨범의 모든 컨텐츠가있는 다른 페이지로 사용자가 재배치됩니다. 그러나 사진 위로 마우스를 가져 가면 앨범의 오른쪽 하단 모서리 위에 편집 버튼이 표시됩니다. 그들이이 버튼을 클릭하면 앨범의 제목을 편집하기위한 편집 양식이 노출됩니다.

그러나 노출 된 수정 버튼을 클릭하면 링크가 활성화되어 해당 사진 앨범의 콘텐츠로 전송됩니다. 편집 양식을 노출하지만 페이지는 자동으로 다른보기로 전송되므로 중요하지 않습니다.

어떻게 해결할 수 있습니까? 하이퍼 링크 노드의 모든 하위 노드도 하이퍼 링크되어 있습니까? 그렇다면 어떻게 그 편집 단추 하나만으로 하이퍼 링크 메커니즘을 비활성화 할 수 있습니까?

+0

우리는 신탁이 아닙니다. 몇 가지 코드를 보여주십시오. – xyz

+0

코드를 보여주십시오. 필요한 경우 [jsfiddle] (http://jsfiddle.net)을 사용하여 문제를 시뮬레이션하십시오. – soundswaste

+0

'e.preventDefault()'가 필요합니다. –

답변

1

https://developer.mozilla.org/en-US/docs/DOM/event.stopPropagationhttp://api.jquery.com/event.stopPropagation/에 대한 문서를 참조하십시오.

$(elementThatOpensTheEditBox).click(function(e){ 
    e.preventDefault(); 
    e.stopPropagation(); 

    // whatever code here to open the edit box 
}); 

요소가 동적으로 생성하는 경우 .on를 사용하여 클릭 이벤트에 바인딩 할 수 있습니다 :

$('body').on('click', elementThatOpensTheEditBox, function(e){ 
    e.preventDefault(); 
    e.stopPropagation(); 

    // whatever code here to open the edit box 
}); 
+0

Hmmmmm, 그것은 AJAX 함수에서 내 DOM 트리를 생성하기 때문에 것 같습니다. 그 리스너를 만들면 이미 존재하는 노드에만 적용됩니다. –

+0

그래, 난 리스너없이 stopPropagation을하려고하는데, 오히려 onclick을 호출하는 별도의 함수 안에서부터. 나는 이것을 내일 알게 될 것이다. –

+0

@NateL 동적으로 생성 된 요소에 대한 최신 코드를 확인하십시오. –

0

jQuery를 사용하여 이벤트 위임 ($.on()) :

<a href="http://www.yahoo.com/" id="outer"> 
    <p>Click in the blue to follow the link</p> 
    <p id="inner">I am inner to the link</p> 
</a> 

var $outer = $('#outer'); 

$outer.on('click', '#inner', function prevent(e){ 
    console.log('Inner clicked.'); 
    e.preventDefault(); 
}); 

http://jsfiddle.net/userdude/fYPnu/2

을 그리고 평범한 자바 스크립트 :

var inner = document.getElementById('inner'); 

inner.addEventListener('click', function prevent(e){ 
    console.log('Inner clicked.'); 
    e.preventDefault(); 
}); 

http://jsfiddle.net/userdude/fYPnu/1

주, IE8 <와 이전 버전과의 호환성을 위해, 당신은뿐만 아니라 .attachEvent()에 대한 감지해야합니다.

+0

내일 이것을 시도 할 것입니다. 엄청 고마워. 난 항상 jquery 선택기에 문제가있는 것 같습니다. 그들은 꽤 까다 롭다. –