如何以编程方式触发对启用AJAX的表单提交按钮的单击?


25

我正在尝试以编程方式(使用jQuery)以Drupal形式触发具有AJAX行为的单击按钮,但到目前为止jQuery('#edit-submit').click()没有任何作用。

一个真正的鼠标点击那个按钮按预期工作。有什么想法使它起作用吗?


如果它是#edit-submit按钮,那么您不仅可以执行$('form')。submit()吗?
cam8001 2011年

那对我也不起作用。它要么以非AJAX方式发布表单,要么不执行任何操作,具体取决于表单构建器中的某些设置。
丹尼尔(Daniel)

Answers:


40

jQuery('#edit-submit').mousedown() -显然有很大的不同。


3
不适用于我
-ram4nd

这个解决方案对我有用。单击按钮执行了ajax调用,但是.click()或变体没有实现,但是.mousedown()可以完美地工作。
Eric Goodwin

我会避免在表单元素上使用ID选择器。如果在AJAX回调过程中重建了表单,则所有元素的ID都会更改,并且jQuery选择器将不再起作用。
Yuriy Babenko 2013年

正是埃里克所说的。我想知道为什么会有区别...说真的,这似乎没有道理。
Johnathan Elmore

@JohnathanElmore mousedown()只是click()事件的“第一部分”,当mouseup()发生时即已完成。当您单击链接,然后在链接区域之外释放鼠标时,click()通常不会触发该链接,并且不会遵循该链接。可能是ajax调用阻止mouseup()触发,但这只是一个猜测……
pamatt 2014年

7

实际上,无需猜测。

您应该使用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');

2
我喜欢这个答案,因为它提供了一种有趣的技术来发现如何与可能正在开发Drupal项目的非Drupal前端开发人员连接到生成的元素。+1
Lester Peabody 2015年

6

创建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形式工作。


您还能张贴示例回调函数吗,当我尝试
过时

1
添加了回调函数:)
Leopathu


3

就我而言,上面推荐的解决方案对我不起作用,但是提到.mousedown()导致以下想法对我有用(Drupal 7):

$('#custom-submit-button').click(function() {
  $('#ajax-submit-button').trigger('mousedown');
});

在“ #ajax_prevent ”下的“ Form API参考”中有一些关于“为什么”的有用的背景信息。


我不需要click()包装器,但是指向ajax prevent的链接是关键!
瑞安·哈特曼

2

通过查看“更好的暴露过滤器”模块,他们通过找到$(。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();
?>

click事件对我有用,而mousedown事件却没有。
2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.