2012-10-25 5 views
0

개체 내부의 내용을 편집하기 위해 textarea로 jEditable이 잘 작동합니다. jEditable의 onblur 옵션을 URL 대신 함수에 직접 사용하는 onBlur를 제출하고 있습니다. 예상대로 모든 작업이 예를 들어를 사용하여 창을 변경하지 않는 한. 고도 + 탭. alt + tab을 사용하면 실제 http 요청을 통해 콘텐츠가 제출되어 콜백 기능을 무시한 것처럼 보입니다.jEditable 제출 onBlur ALT + TAB로 실패했습니다

내 아주 기본적인 샘플 구현은 다음과 같습니다

$(".editable").editable(function(content,settings){ 
     content = content.replace(/\n/gi,"<br />"); 
     return content; 
    },{ 
    data: function(value, settings) { 
     return value.replace(/<br[\s\/]?>/gi, '\n'); 
    }, 
    type: "textarea", 
    onblur: "submit" 
});​ 

당신은 여기를 테스트 할 수 있습니다, 크기를 조정 움직임 등 심지어 탭 사이를 이동 : http://jsfiddle.net/xmajox/wePp5/

나는 다른 모든 윈도우 작업을 시도했습니다 브라우저에서 잘 작동합니다 (데이터를 제출하고 편집 모드를 종료합니다).

길들이기에 대한 아이디어가 있으십니까?

업데이트 : 다른 사람들과 몇 가지 테스트 및 일부 공동 작업을 한 후에는 운영체제 (창 관리자)에 의존하는 것으로 보입니다. 일관되게 우분투 12.10에서 발생하지만 Mac 또는 Windows에서는 발생하지 않습니다 (다른 Linux 상자는 테스트하지 않았습니다).

또한 alt-tab을 사용할 때 내 콜백 메서드가 실행되지만 폼은 나중에 POST됩니다. 라이브 preventDefault를 추가하는 것은 도움이되지 않았습니다.

답변

0

이 문제를 해결할 수있는 해결책을 찾았지 만 이러한 특정 상황에서 왜 이러한 일이 발생하는지 이해하고 있습니다.

첫 번째로 나는 다른 조합의 10 번째에서 이것을 시도 했으므로이 문제가 발생하지 않았기 때문에 세계에서 가장 운 좋은 사람이되어야합니다. 즉, 일어날 수있는 곳은

입니다.
Ubuntu 12.10 (with Unity) and Chrome (v22 at the time of this post) 

면책 조항 : 이것은 다른 곳에서 발생하지 않는다는 의미는 아니며, 테스트 한 것 (또는 테스트를 요청한 친구)에게 재현 할 수 없습니다.

문제 : 초점이 손실되면, jEditable - 버전 1.7.1의로가 - 실제로 소스의 의견에 따라 중복 작업을 방지하기위한 조치 (기본적으로 200 밀리 초)을 실행하기 전에 제한 시간을 설정합니다. 시간 초과가 시작되기 전에 (위의 브라우저/os 조합을 사용하여) alt + tab을 브라우저 창 밖으로 드래그하면 (데이터가 전송되고 메소드가 실행되기 전에) 데이터와 함께 POST 요청이 강제로 무시됩니다 preventDefaults 또는 반환 falses. alt 키를 누르면이 문제가 발생하지 않습니다 ... 계속 누르고 있으면 (초과 200ms, 즉 제한 시간이 시작될 충분한 시간) 누른 다음 alt 키를 눌러 멀리 이동하십시오.

솔루션 : 나는 시간 제한을 감소 (또는 제거)하는 jEditable의 소스를 편집했다. 그래서 주위 라인 (280)은 말한다 여기서

(...) 
    input.blur(function(e) { 
     // prevent double submit if submit was clicked 
     t = setTimeout(function() { 
       form.submit(); 
     }, 200); 
    }); 
(...) 

나는 그것을 변경 :

(...) 
    input.blur(function(e) { 
     form.submit(); 
    }); 
(...) 

참고 : 내가 ONLY 흐림 및없이 텍스트 영역을 제출 (때문에 내 상황이 제거 사용자가 데이터를 제출할 수있는 다른 컨트롤) 미카 투 우폴라 (Mika Tuupola)가 의견에 언급 한 두 가지 제출 문제를 재현 할 수 없습니다.submit onBlur가 활성화 된 채 텍스트 입력 필드 (enter 키를 누름)가있는 경우 해당 상황에 빠질 수 있습니다. 이 경우에는 타임 아웃을 줄이거 나 onBlur를 사용하지 않는 것이 좋습니다.