JQuery自动完成更改事件

时间:2012-04-19 16:49:10

标签: javascript autocomplete combobox jquery

我的页面上有一个jquery autocomplete组合框,如下所示:

$.widget( "ui.combobox", {
        _create: function() {
        ...
        var input = this.input = $( "<input>" )
                .insertAfter( select )
                .val( value )
                .autocomplete({
                    ...
                    select: function( event, ui ) {
                    ...
                    change: function( event, ui ) {
                    ...

$(function() {
    $("#myid").combobox();
}

selectchange个事件中我执行了ajax调用并更改了隐藏字段中的一些信息,但是当我输入内容并且而不会忽略文本时出现问题字段单击提交按钮 - change事件未被触发,我在服务器上得到错误的数据(基本上我在隐藏字段中获取数据,这些数据先前由select-change触发事件设置,但没有捕获最新的) 。那么如何在发送表单之前执行文本字段非聚焦以触发change事件?或者也许还有其他一些方法可以捕获并触发文本字段中的最新更改(mb替换某些onkeypress事件的更改)?谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您可以在提交按钮

上禁用默认操作
$(".submit-btn").click(function(e){e.preventDefault();});

这样,提交按钮不会提交表单,您的表单将获得选择或更改事件,因为用户将通过单击提交按钮来解决问题

答案 1 :(得分:0)

您可以做的是单独输出用于在更改事件上获取隐藏字段数据的函数。此外,还有一个回调函数作为该函数的参数,在更新数据后将调用该函数。然后,您可以在更改事件处理程序和表单的提交处理程序中使用相同的函数。在提交处理程序中,您将禁用默认提交操作并提供对该功能的回调,以便在隐藏字段中更新数据时,您可以通过JS提交表单。

上面的解决方案应该可行,但是如果您要从自己的服务器中提取数据,那么您不应该通过客户端上的Javascript来实现,但这应该仅在您的服务器端代码上进行。例如,如果您使用隐藏字段来映射用户输入的字符串,例如“波兰”到您的数据库中的某个ID并将该ID存储在隐藏字段中然后您应该将“poland”作为字符串发送到服务器并在服务器上处理此映射。这样,您的表单无需等待从服务器获取此映射。当然,这只能在您向服务器发送AJAX请求而不是从服务器无法访问的其他服务器时才能完成。