2012-06-21 3 views
0

클릭을 제출하기 전에 앵커에서 href를 수정하려고합니다.preventDefault를 다시 사용하십시오.

$('.preview').live('click', function(e){ 
    e.preventDefault(); 
    var _this = this; 
    var content = $('#redactor_content').getCode(); 
    var page_id = $('#page_id').val(); 
    $.ajax({ 
     url: ADMIN_CORE_URL + 'pages/autosave.php', 
     dataType: 'json', 
     type: 'POST', 
     data: {page_id : page_id, content : content}, 
     success: function(data){ 
      var url = $(_this).attr('href') + data.revision_id; 
      $(_this).attr('href', url); 
      $(_this).unbind('click').click(); 
     } 
    }); 
}); 

어느 내가 제출 클릭을 얻을 질수 아니면 제가 루프를 얻을 : 다음은 무한 루프를 생성하지만

.

루프를 사용하지 않고 클릭을 다시 활성화하려면 어떻게해야합니까?

+0

그래서 당신은 첫 번째 클릭에 대한 HREF를 변경하고자하는 데 도움이? – Radu

+0

이 스레드와 다른 곳의 대답을 통해 preventDefault()를 실행 취소 할 수있는 방법이 없다고 생각됩니다. 우리는 A) 이벤트 처리자를 다시 등록하거나 B) preventDefault()가 처음 호출되지 않도록해야합니다. – bjornl

답변

1

당신이 뭔가를 시도해 볼 수도 있습니다 (이 두 가지 방법은 이후 너무 .on().off() API로 대체되었습니다) . 그런 식으로 링크가 클래스 x (또는 원하는 호출이 무엇이든) 인 경우에만 핸들러가 실행됩니다.
ajax 응답 후에 클래스를 제거하면 클릭 핸들러가 더 이상 실행되지 않아야합니다.

$(body).on('click', '.preview.x', function(e){ 
    e.preventDefault(); 
    var _this = this; 
    var content = $('#redactor_content').getCode(); 
    var page_id = $('#page_id').val(); 
    $.ajax({ 
     url: ADMIN_CORE_URL + 'pages/autosave.php', 
     dataType: 'json', 
     type: 'POST', 
     data: {page_id : page_id, content : content}, 
     success: function(data){ 
      var url = $(_this).attr('href') + data.revision_id; 


      // $(_this).attr('href', url); 
      // $(_this).removeClass('x').click(); 
      // 
      // edit: version 2: 
      window.open(url); 
     } 
    }); 
}); 
+0

그런 일을하려고 생각했는데 링크가 한 번만 눌려 질 수 있다는 뜻이 아닌가요? –

+0

@AsaCarter 그래, 네가 원하는게 아니야?난 당신이 아약스 후 링크에 대한 href를 변경하려면 다음 일반 클릭 (그냥 정상적인 페이지 리디렉션, 아니 preventDefault + jquery)처럼 href를로드 할 줄 알았는데. 그렇지 않다면 실제 목표가 무엇인지 구체적으로 설명하십시오. – Andy

+0

죄송합니다. 링크를 다시 클릭 할 수 있도록 새 창에서 열립니다. –

0

unbind()이 예상 한대로 작동하지 않고 반복적으로 동일한 비트의 코드가 계속 실행되는 경우 ajax 호출이 성공할 때마다 수동으로 링크를 클릭해야하기 때문에 루프가 발생합니다.

.click()을 제거하고 원본 클릭을 정확하게 바인딩 해제하는 방법을 알아 낸 다음 필요하면 다시 click()을 추가하십시오. 당신이 결합하는 live()을 사용하고 있기 때문에 보조 노트로서, 그것은 더 의미가 바인딩을 해제 할 .die()를 사용할 수 있도록 할

0

당신이,

$(_this).off('click'); 
.live이되지 않습니다 JQuery와 1.7.2의로

.on

$(_this).unbind('click').click(); 

가 바인딩 해제 후

$('body').on('click','.preview', handler); 

을 사용하는 교체 .click() 클릭 이벤트가 발생합니다. 그것을 제거하기 위해 이벤트 핸들러와 .off()를 연결 편집 문제

에게

var handler = function(event){ 
    event.preventDefault(); 
    var _this = this; 
    alert('called'); 
    $(_this).off('click').on(handler); 
} 


$('body').on('click','.preview', handler); 

사용 CSTE 연구진()를 해결해야한다는 제거

.

DEMO

희망이

+0

클릭을 제거하면 앵커를 "클릭"하지 않습니다.이 경우 –

+0

핸들러를 다시 부착 할 수 있습니다. – Dhiraj

+0

감사합니다. URL 값을 변경 한 후 링크를 ​​클릭하여 데모를 수정할 수 있습니까? 나는 여전히 클릭 할 수있는 링크를 얻지 못한다 : ( –

관련 문제