2010-07-04 4 views
0

designMode가 'on'으로 설정된 iframe이 있습니다. 그것에는 여러 개의 div가 있으며 iframe이 편집 가능하기 때문에 사용자는 해당 div 중 하나를 입력하고 편집 할 수 있습니다. 사용자가 div 중 하나를 편집 할 수 없게해야합니다.요소 사용자를 얻는 방법은 현재 designMode iframe 내에서 입력하고 있습니까?

이 같은 사업부 클릭에서 사용자를 방지 할 수 있습니다 :

document.getElementById('mydiv').addEventListener('mousedown', function(event) { 
    event.preventDefault(); 
    return false; 
}, true); 

그러나, 사용자는 여전히 키보드의 화살표 키를 사용하여 사업부로 커서를 통해 이동하고 편집 할 수 있습니다. div 같이 포커스를 받으면 콜백을 시도했는데, 다음과 같습니다.

document.getElementById('mydiv').addEventListener('focus', function(event) { 
    ... 
}, true); 

그러나이 콜백은 호출되지 않습니다. 그런 다음 키 누르는 것을 방지하려고 시도했습니다.

document.getElementById('mydiv').addEventListener('keydown', function(event) { 
    event.preventDefault(); 
    return false; 
}, true); 

그러나 콜백은 호출되지 않습니다. 난 문서에 콜백을 연결 시도 :

document.addEventListener('keydown', function(event) { 
    ... 
}, true); 

및 콜백 후 호출되는 않지만, 나는 대상 요소는 우려의 사업부 인 경우에만 이벤트를 취소 할 수있는 방법이 필요하다.

목표를 달성하는 방법에 대한 아이디어는 언제나 환영합니다.

답변

0

편집 가능한 요소에 '편집 가능'클래스를 적용하고 적용 할 수없는 경우 제거 할 수 있습니다.

YUI는 다음과 같은 간단한 간단한 테스트를 제공합니다. YAHOO.util.Dom.hasClass (yourEl, 'editable');

그런 다음 처리기 내에서 대상에 '편집 가능'클래스가 없으면/return/preventDefault/stopEvent를 취소하십시오.

을 -d

ADDITION http://developer.yahoo.com/yui/examples/event/event-delegation.html

+0

음 ... 어떤 콜백을 사용해야하나요, 어떤 요소입니까? 'focus'와 'keypress'는 document.getElementById ('mydiv')가 아닌 document 요소에 대해서만 실행됩니다. 문서에 대해 'keydown'을 사용하면 대상은 항상 문서로 설정됩니다. –

+0

내가 제안하는 것은 하위 요소 집합에 컨테이너의 클릭 동작을 위임하는 것이며 각 요소는 '편집 가능'클래스 이름이 적용됩니다. 그게 그들이해야 할 일이라면. click 이벤트가 발생하면 클릭 된 대상을 컨테이너의 기본 범위에서 수신하므로 이벤트 콜백에서 'editable'className을 확인할 수 있습니다. 따라서 클릭 수를 늘리십시오. 편집 할 수 없으면 활동이 스쿼시됩니다. – danjah

1

당신은 파이어 폭스 2, 각 contentEditable를 사용하는 대신 designMode를 사용하지 않는이 될 것이라고 할 수있는 가장 쉬운 방법으로 몇 이전 버전의 브라우저를 무시할 수있는 경우 편집 가능한 <div>의 편집 가능하지 않은 <div>에는 없습니다. 당신이 발견 한 것처럼

<div contenteditable="true">Some editable stuff</div> 

<div>Some non-editable stuff</div> 

<div contenteditable="true">Some more editable stuff</div> 

그렇지 않으면, 당신이지는 싸움을하고 내장 브라우저 동작.

+0

contentEditable과 designMode 사이에 실제 차이점이 있습니까? (전자는 특정 요소에 대한 것이고 후자는 전체 문서에 대한 것입니다)? –

+0

Firefox에서'contentEditable'에 약간의 주름이 생겼습니다. 그 이유는'designMode'보다 훨씬 많이 구현 되었기 때문일 것이지만 일반적으로 올바른 것입니다. 범위와 다른 점은 없습니다. –