0

我的页面上有一个 jquery 自动完成组合框,如下所示:

$.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();
}

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

4

2 回答 2

0

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

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

于 2012-04-19T19:48:39.867 回答
0

您可以禁用提交按钮上的默认操作

$(".submit-btn").click(function(e){e.preventDefault();});

这样提交按钮将不会提交表单,并且您的表单将获得选择或更改事件,因为用户将通过单击提交按钮失去焦点

于 2012-04-19T17:00:21.617 回答