2012-06-05 1 views
6

필자는 필자가 만난 가장 이상한 버그가 있으며, 필자는이 사실에 대한 나의 지혜가 거의 끝났습니다. 이 디버깅 방법 (또는 영리한 해결 방법)에 대한 아이디어가있는 사람이라면 누구나 굉장 할 것입니다.Firefox 커서가 보이지 않고 다른 것을 클릭했을 때 표시됩니다.

문제 : 나는의 contentEditable 사용하여 파이어 폭스에서 간단한 WYSIWYG 편집기를 만들고있어

. 아약스를 통해 편집 할 텍스트를로드 할 때 문제가 나타납니다. 로드하기 전에 커서가 잘 보이고 (1 초 동안) 텍스트가로드되면 사라집니다. 여전히 텍스트를 입력 할 수 있으며 커서는 여전히 "거기"입니다 (상태 상자는 현재 줄/열을 잘 보여줍니다). 그러나 커서는 보이지 않으며 선택 오버레이가 나타나지 않습니다.

다음은 정말 이상하게 만드는 이유입니다. 다른 모든 DOM 요소에서 다른 창에서도 아무 것도 클릭하지 않으면 다른 창에서도 커서가 돌아가고 정상적으로 작동합니다. 실제로, 커서에 문제가있는 유일한 시간은 맨 처음 페이지를로드 할 때 또는 새로 고침 할 때입니다. contentedtable div 안에 아무 곳이나 클릭해도 수정되지 않습니다. 새로 고치려면 바깥을 클릭해야합니다.

지금 당장은 해결 방법이 필요합니다. $ (someelement) .click 또는 $ (somelement) .focus의 500 가지 맛을 시도했지만 사용자의 실제 클릭을 완전히 복제하지는 않습니다.

누구나 전에 본 것과 같은 사람이 있습니까? 감사.

+0

Firefox에는 다양한 상황에서 사라지는 캐럿에 여전히 큰 문제가 있습니다. 특정 상황에 대한 해결책을 찾기 위해 시행 착오를 바라는 것이 가장 좋습니다. –

답변

6

을, 그러나 나는 빠른 - 및 - 더러운 수정 트릭 않습니다 발견했다. 나는 앵커 태그를 DOM에 추가하고, 포커스 (jQuery .focus 사용)를 지정한 다음, 제거한다.

나는 여러 번 전에 .focus를 시도했지만, 항상 트릭을하지 않은 div 또는 li 요소에서 시도했다. 앵커 태그 여야합니다. 앵커 태그가 파이어 폭스의 내부 커서 표시 메커니즘에서 뭔가를 재설정하는 포커스에 가시적 인 구성 요소를 실제로 가지고 있기 때문에 그것이 의심 스럽습니다.

어느 쪽이든, 이와 같은 문제를 해결하려고 시도했지만 해결되지 않는 경우 MorganTiley의 설명을 참조하십시오. 이는 좋은 리드를 줄 수 있습니다.

+0

환상적입니다. 나는이 문제에 대한 해결책을 오랫동안 찾고 있었다. 이것은 나를 위해 작동합니다. 다른 질문과 답변은 텍스트 범위를 선택하려고 시도했지만 작동하지 않았습니다. 감사. – mkaj

2

내용을로드 할 때 html 노드의 구조가 변경되어 선택이 무효화되기 때문입니다 (커서는 접힌 선택 항목 임). Rangy을 통해 초기화하는 것이 좋습니다. 그것은 jquery와 함께 잘 작동합니다. jquery를 사용하여 contentEditable 영역의 첫 번째 요소를 가져옵니다. 새로운 단 범위를 만들고 해당 단락 (노드)을 선택하고 축소하여 시작합니다. 이렇게하면 커서가 콘텐츠의 맨 앞에 놓입니다. 여기 글쎄, 난 문제의 원인이되고 있는지 확인하지 않은 일부 거친 코드를

$(document).ready(function() { 
    //init rangy 
}); 

function ajaxLoaded { 
    var p = $(".contenteditablediv p:first")[0]; 
    var sel = rangy.getSelection(); 
    sel.collapse(p, 0); 
} 
+0

불행히도 Rangy는 내 문제를 해결하지 못했습니다. 설명을 통해 선택에 대한 중요한 통찰력이 제공되었지만 말입니다. 감사. –

+0

무슨 일이 있었습니까? 당신은 더 많은 맥락을 줄 수 있습니까? 예 : 페이지에서 실행중인 다른 스크립트 또는 html이 설정되는 방법은 무엇입니까? Rangy는 확실히 원하는 위치로 커서를 이동할 수 있어야합니다. – MorganTiley

+0

다른 스크립트가 페이지에서 실행되고 있지만 다른 모든 스크립트가 완료된 후에 내 선택/변경 코드 (게시 한 코드가 흐릿한 코드)가 모두 생성되었는지 확인했습니다. 솔직히 내 문제는 아마도 내가로드하려는 외부 자바 스크립트의 어딘가 깊은 곳에서 거짓말을하고있을 것입니다. 좀 더 파고해야 겠어. 어느 쪽이든, 파이어 폭스는 어쨌든 내 커서를 재설정 할 수있을만큼 똑똑해야한다고 생각하기 때문에 아마도 이것들은 로그해야하는 버그 일 것이다. 귀하의 의견을 고맙게 생각합니다. –