2017-01-16 5 views
0

jQuery Migrate와 함께 jQuery를 잘 알지 못합니다. 내가 일하고 사이트는 아래의 스크립트를 검색하는 일부 페이지로드에서 잘 작동 한 후 마이그레이션 버전 1.4.1필터 사용 후 코드 재 활성화

와 jQuery를 1.12를 사용

jQuery(".single_add_to_cart_button").click(function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 

그러나 일부 필터 후,이 청취자를 옛날 방식을 구축 잊혀진다.

어떻게해야합니까?

+0

을 위임 된 이벤트 핸들러를 사용해야합니다. –

답변

1

청취자가 첨부 된 요소를 제거합니다. 이것은 아마도 필터링 시간에 발생합니다. 부모 요소에 리스너를 설정하면 완전히 제거되지 않는 동작을 피할 수 있습니다 (예 : <td><table> 요소). 리스너를 최상위 레벨 (document)으로 설정하지 않을 것입니다. 제거되지 않는 부모에서 설정하는 것이 훨씬 더 성능이 좋기 때문입니다. 수신기를 document으로 설정하면 모든 클릭이 감시되고 .single_add_to_cart_button 요소가 검색됩니다.

당신은 부모에게 리스너를 설정하지만 다음 코드 사용하는 경우에만 .single_add_to_cart_button에 대한 클릭에 반응 할 수 있습니다은`.single_add_to_cart_button` 요소는 다음 DOM에서 당신을 제거하고 다시 경우

jQuery("#tableWithId").on("click", ".single_add_to_cart_button", function(e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
}); 
+0

Jeez. 처음에는 jQuery (document)가 작동하지 않았다. 어쨌든 고맙습니다. –

1

.single_add_to_cart_button과 일치하는 요소가 제거되었다가 다시 추가되면 위임을 사용하여 항상 거기에있는 요소 (body, document)에 리스너를 배치 한 다음 지정된 쿼리와 일치하는 요소에서만이를 실행해야합니다. 예 :

jQuery(document).on('click', '.single_add_to_cart_button', function (e) { 
    e.preventDefault(); 
    var url = jQuery(this).data('href'); 
    window.open(url, '_blank'); 
    return false; 
});