我已经按照本网站的教程:http://thedrupalblog.com/creating-autocomplete-field-using-forms-api-and-menu-callback并让我的自动完成功能很好。Drupal自动完成提交选择的建议
什么我不知道该怎么做,似乎无法在网上找到是有表单提交时,用户点击一个建议,而不是简单地完成该字段。
在此先感谢。
我已经按照本网站的教程:http://thedrupalblog.com/creating-autocomplete-field-using-forms-api-and-menu-callback并让我的自动完成功能很好。Drupal自动完成提交选择的建议
什么我不知道该怎么做,似乎无法在网上找到是有表单提交时,用户点击一个建议,而不是简单地完成该字段。
在此先感谢。
这可能不是最好的“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文件。
无论何时你编辑核心,你都必须担心核心安全更新,它会覆盖你的更改,并让你的网站崩溃,并且争先恐后地修复它。
以下代码将覆盖“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();
}
};
});
或者,如果你想启用它在所有自动完成的表格,而无需使用一种形式改变,你可以在你的JS文件使用下面的下面的代码片段:
Drupal.jsAC.prototype.select = function (node) {
this.input.value = $(node).data('autocompleteValue');
if(jQuery(this.input).hasClass('form-autocomplete')){
this.input.form.submit();
}
};
这只能如果您点击自动填充建议,而不是通过键盘选择它。
要捕获键盘和鼠标选择,请覆盖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();
};
由于7.36/ Issue #365241,这是更好的选择上触发autocompleteSelect
事件的支持。
如果您正在使用的Ajax框架,你可以赶上这一点,并为三大类领域承诺的更改事件(单击,进入上更新的值标签),例如:
$field = array(
// ...
'#ajax' => array(
// ...
'event' => 'change autocompleteSelect',
),
);
否则,您可以从自定义脚本中捕捉事件。它在编辑元素(更新后)上触发,并带有所选节点的一个元素数组的附加参数。
假设您有两个字段,如标题,说明。我们假设这两个字段中都没有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();
});