2011-05-19 49 views

回答

6

这可能不是最好的“Drupal的”办法做到这一点,也许有人可以改善它在你的“杂项/ autocomplete.js”文件查找

Drupal.jsAC.prototype.select = function (node) { 
    this.input.value = $(node).data('autocompleteValue'); 
}; 

和将其更改为:

Drupal.jsAC.prototype.select = function (node) { 
    this.input.value = $(node).data('autocompleteValue'); 
    if(jQuery(this.input).hasClass('auto_submit')){ 
     this.input.form.submit(); 
    } 
}; 

然后在你的表单添加项目:

'#attributes' => array('class'=> array('auto_submit')), 

这将导致表单提交,无论用户选择如何选择(输入按钮或鼠标点击)

编辑:4年后,我得到了一个投票,并意识到这需要更新...基本@ Azhar是正确的,而不是编辑现有文件,应该将此代码添加到在autocomplete.js之后加载的新JS文件。

无论何时你编辑核心,你都必须担心核心安全更新,它会覆盖你的更改,并让你的网站崩溃,并且争先恐后地修复它。

10

以下代码将覆盖“Drupal.jsAC.prototype.select”函数,并且这可以在任何JS文件中使用而不用修改misc/autocomplete.js

$(document).ready(function(){ 
     Drupal.jsAC.prototype.select = function (node) { 
     this.input.value = $(node).data('autocompleteValue'); 
     if(jQuery(this.input).hasClass('auto_submit')){ 
      this.input.form.submit(); 
     } 
     }; 
    }); 
0

或者,如果你想启用它在所有自动完成的表格,而无需使用一种形式改变,你可以在你的JS文件使用下面的下面的代码片段:

Drupal.jsAC.prototype.select = function (node) { 
    this.input.value = $(node).data('autocompleteValue'); 
    if(jQuery(this.input).hasClass('form-autocomplete')){ 
    this.input.form.submit(); 
    } 
}; 
1

这只能如果您点击自动填充建议,而不是通过键盘选择它。

要捕获键盘和鼠标选择,请覆盖hidePopup方法。

// Autosubmit on keyboard & click. 
Drupal.jsAC.prototype.hidePopup = function (keycode) { 
    // Select item if the right key or mousebutton was pressed. 
    if (this.selected && ((keycode && keycode != 46 && keycode != 8 && keycode != 27) || !keycode)) { 
     this.input.value = $(this.selected).data('autocompleteValue'); 
     if (jQuery(this.input).hasClass('auto-submit')) { 
     this.input.form.submit(); 
     } 
    } 
    // Hide popup. 
    var popup = this.popup; 
    if (popup) { 
     this.popup = null; 
     $(popup).fadeOut('fast', function() { $(popup).remove(); }); 
    } 
    this.selected = false; 
    $(this.ariaLive).empty(); 
    }; 
0

由于7.36/ Issue #365241,这是更好的选择上触发autocompleteSelect事件的支持。

如果您正在使用的Ajax框架,你可以赶上这一点,并为三大类领域承诺的更改事件(单击,进入上更新的值标签),例如:

$field = array(
    // ... 
    '#ajax' => array(
     // ... 
     'event' => 'change autocompleteSelect', 
    ), 
); 

否则,您可以从自定义脚本中捕捉事件。它在编辑元素(更新后)上触发,并带有所选节点的一个元素数组的附加参数。

-1

假设您有两个字段,如标题,说明。我们假设这两个字段中都没有html标签。我们已经建立了一个视图来列出标题和描述。我们也有一个标题作为自动完成的暴露过滤器。

jQuery('html').on('click touchstart','.ui-autocomplete li a', function(e){ 
      var text = jQuery(this).html(); 
      jQuery('.form-autocomplete').val(text); 
      jQuery('.form-autocomplete').parent().parent('form').submit(); 
     }); 

最详细的版本是,https://www.drupal.org/node/2852380