2013-05-03 7 views
2

편집 양식 뒤에 오버레이를 클릭 할 때 클릭 할 때 닫기를 사용하지 않으려 고합니다. 행을 편집 할 때 열리는 모달이지만 어떻게해야하는지 모르겠습니다. 내가 좋아하는 뭔가를 시도했다 :JQGRID - JQMODAL : 오버레이를 클릭 할 때 모달을 닫습니다.

editOptions: { 
    url: 'foo/edit.html', 
    mtype: 'PUT', 

    //some other options 
    closeAfterEdit: true, 
    reloadAfterSubmit: true, 
    onClose: function() { 
     alert('Hi ^_^'); 
    } 
} 

을하지만 'X' 버튼으로 클릭 한 경우에만 트리거합니다. 오버레이 (모달을 벗어남)를 클릭하면 모달이 닫히고 해당 경고는 트리거되지 않습니다. 내가 원하는 것은 모달을 클릭하거나 해당 오버레이를 제거 할 때 닫는 기능을 비활성화하는 것입니다.

감사합니다.

답변

6

흥미로운 문제입니다. onClose 오버레이를 클릭하면 콜백이 호출되지 않으며 (모달 대화 상자를 클릭하면) 콜백이 호출되지 않고 대화 상자가 닫힙니다.

재밌지 만 jqModal.js에는 이미 요구 사항을 구현하는 데 적합한 옵션이 있습니다. closeoverlay 옵션은 $.fn.jqm입니다 (the line 참조). 문제는 jqGrid에 옵션을 설정할 수있는 public 속성이 없다는 것입니다. jquery.jqGrid.src.jscloseoverlay : true에서 closeoverlay : false으로 수정하면 (closeoverlay:!0에서 closeoverlay:!1까지 jquery.jqGrid.min.js으로 변경됨) 필요한 행동을 취하게됩니다.

문제는 jqGrid 코드를 수정하지 않고 요구 사항을 구현하는 간단한 방법이 없다는 것입니다.

UPDATED

: 난 jqModal.js 모듈 하나의 시간 코드를 분석하고 I'v가있는 jqGrid의 소스 코드를 변경하지 않고, 간단한 방법 알았다. 모듈은 최소화 된 형태로만 존재하기 때문에 분석이 어렵습니다. 따라서 코드를 읽는 것은 어렵습니다.

솔루션 :

$.jqm.params.closeoverlay = false; 

설명 : 당신은 jqModal.js 모듈의 기본 설정 변경 다음 줄이 포함되어야 the linesjqModal.js의 모듈이 초기화를 $.jqm 그래서 사방이 jquery.jqGrid.min.js을 포함 후에

$.jqm = { 
    hash: {}, 
    open: function (s,t) { ... }, 
    close: function (s) { ... }, 
    params: {} 
}; 

로 빈 개체로 $.jqm.params이 있습니다. jqModal.js 매개 변수의 기본값 ($.jqm의 매개 변수 목록에 직접 지정되지 않음)을 제공하는 데 사용할 수 있습니다. 따라서 $.jqm.params.closeoverlay = false; 어딘가에 jquery.jqGrid.min.js (또는 jquery.jqGrid.src.js)을 추가하면 오버레이를 클릭 할 때 jqGrid 대화 상자를 닫지 않아도됩니다.

+0

그래, 쉬운 방법은 아닙니다. 또한 jqGrid 개발자들에게 제안 할 것을 제안했습니다. 당신의 제안을 확인할 것입니다. – DaGLiMiOuX

+0

정말 고마워요 !! 그것은 작동하지만, 나는 그들이 쉽게 할 수있는 방법, 예를 들어 새로운 속성을해야한다고 생각합니다. 개발자들에게 제안하는 것이 좋다고 생각한다면, 나는 그것을 제안 할 것입니다. 또한 내가 전에 게시 한 다른 질문에서 설명하지 않는 것에 대해 사과하고 싶습니다. 내가 말했듯이, 고마워!^_^ – DaGLiMiOuX

+1

@DaGLiMiOuX : 환영합니다! 소스에서 '클로 오버 오버레이 (closeoverlay)'를 변경하는 것이 일반적으로 최선의 방법은 아니지만 실제로는 가장 간단한 방법입니다 *. 나중에 해당 제안을 trirand에 게시합니다. 문제는 jqModal 모듈이 jqGrid의 코드에서 여러 번 사용된다는 것입니다. 따라서 jqGrid 메소드에서 옵션을 public으로 만드는 것은 jqGrid 코드의 여러 라인을 변경하는 것입니다.하나는 jqModal 모듈에 아래 옵션을 전달해야합니다. – Oleg

관련 문제