2010-04-30 6 views
1

$(document).ready(function() {}) 안에 내가 지금JQuery와는 페이지의 JS 파일에서

$(".school a").live("click", function (e){ 
    e.preventDefault(); 
    ....; 
    jsFunc(param1, param2, param3); 
}); 

레일에 의해 생성 된 태그 :url, :action, :before와 link_to_remote이 클래스 학교와 사업부가 link_to_remote 레일 발사하지 기능을 온 클릭 :html.

이 링크를 클릭하면 link_to_remote와 관련된 모든 작업이 수행되지만 document.ready의 onclick 이벤트는 첨부되지 않습니다. 왜 이런 일이 일어날까요? jsFunc은 urync async-ly에 대한 게시물입니다. link_to_remote의 :before에있는 해당 게시물 URL을 알아 냈습니다.하지만 연결 기능을 사용할 수있는보다 우아한 방법이 있습니다.

+0

'반환 FALSE '가 훨씬 낫다 그냥'preventDefault'보다. 'preventDefault'도 IE에서 실패합니다. –

답변

0

link_to_remote 도우미가 Prototype에 의존한다고 생각합니다. jQuery로 전환했다면, link_to_remote와 같은 Rails의 자바 스크립트 도우미가 작동하지 않을 수 있습니다.

0

link_to_remote는 onclick 속성과 함께 작동합니다. 분명히 bind/live 이벤트가 처리되기 전에 호출됩니다. 따라서 preventDefaults가 너무 늦게 발생합니다. 내 경우

난 그냥 '초'를 방지하기 링크를 클릭합니다, 그래서 난 그냥 첫 번째 클릭시 "온 클릭"속성으로 널 :

/* not (yet) well tested */ 
function doubleClickhandler(event) { 
    var t = $(event.target); 

    if (t.data("clicked")) { 
    event.preventDefault(); 
    } else { 
    t.data("clicked", true); 
    if (t.attr("onclick")) { 
     /* forcefully remove onclick handler */ 
     t.attr("onclick", ""); 
    } 
    } 
} 

function setupdoubleClickHandlers() { 
    $("a.doubleclick").each(function() { 
    var el = $(this); 
    el.removeClass("doubleclick"); /* prevent multiple setups */ 
    el.bind("click", doubleClickhandler); 
    }); 
} 

jQuery(document).ready(function($) { 
    setupdoubleClickHandlers(); 
    $(document).bind('reveal.facebox updatedfacebox', function() { 
    setupdoubleClickHandlers(); 
    }); 
});