프로그래밍 방식으로 (jQuery를 사용하여) Drupal 형식의 AJAX 동작이있는 클릭 버튼을 트리거하려고하지만 지금까지 jQuery('#edit-submit').click()
아무것도하지 않습니다.
실제 마우스를 클릭 의도 한대로 그 버튼 작동합니다. 어떻게 작동시키는 아이디어가 있습니까?
프로그래밍 방식으로 (jQuery를 사용하여) Drupal 형식의 AJAX 동작이있는 클릭 버튼을 트리거하려고하지만 지금까지 jQuery('#edit-submit').click()
아무것도하지 않습니다.
실제 마우스를 클릭 의도 한대로 그 버튼 작동합니다. 어떻게 작동시키는 아이디어가 있습니까?
답변:
jQuery('#edit-submit').mousedown()
-분명히 큰 차이가 있습니다.
mousedown()
는 click()
이벤트의 "첫 번째 부분"일 뿐이며 mouseup()
발생 하면 완료됩니다 . 링크를 클릭 한 다음 링크 영역 밖으로 마우스를 놓으면 click()
일반적으로 연결이 해제되지 않으며 링크를 따르지 않습니다. 아마 아약스 호출은 mouseup()
해고를 막을 수 있지만 이것은 단지 추측에 불과합니다 ...
실제로는 추측 할 필요가 없습니다.
Drupal 동작을 사용해야합니다
Drupal.behaviors.yourFunctionName = {
attach:function (context, settings) {
// Your code goes here....
}
}
그러면 설정의 ajax 속성에 액세스 할 수 있습니다.
Drupal.behaviors.yourFunctionName = {
attach:function (context, settings) {
console.log(settings.ajax);
}
}
구성에 따라 콜백 함수 이름, 선택기 ID 및 트리거 이벤트 이름과 같은 다양한 속성이있는 트리거 요소 목록이 표시되어야합니다.
그런 다음 관련 정보를 사용하여 이벤트를 트리거 할 수 있습니다.
// $(selector).trigger(eventName);
// for example...
$('#edit-product-id-15', context ).trigger('change');
다음과 같이 ajax 제출을 작성하십시오.
$form['button'] = array(
'#type' => 'button',
'#value' => 'Click',
'#ajax' => array(
'callback' => '_kf_reading_user_points',
'wrapper' => 'reading-user-points',
'method' => 'replace',
'event' => 'click',
),
);
function _kf_reading_user_points(&$form, &$form_state) {
// Something within the callback function.
}
그러면 jquery .click () 이벤트가 drupal ajax 형식으로 작동합니다.
.trigger()
jQuery 메소드를 사용할 수도 있습니다 .$('#element').trigger('click');
필자의 경우 위의 권장 솔루션이 효과가 없었지만 .mousedown ()으로 언급하면 다음과 같은 아이디어가 나에게 도움이되었습니다 (Drupal 7).
$('#custom-submit-button').click(function() {
$('#ajax-submit-button').trigger('mousedown');
});
"이유"에 대한 유용한 배경 정보가 있습니다. #ajax_prevent 의 Form API Reference에 있습니다.
더 나은 노출 필터 모듈을 살펴보면 $ (. ctools-auto-submit-click ')을 찾아 클릭을 통해 AJAX 양식을 제출합니다.
<?php
// ... near line 190 of better_exposed_filters.js
// Click the auto submit button.
$(this).parents('form').find('.ctools-auto-submit-click').click();
?>