【问题标题】:JQuery autocomplete change eventJQuery 自动完成更改事件
【发布时间】:2012-04-20 03:48:39
【问题描述】:

我的页面上有一个 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();
}

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

【问题讨论】:

    标签: javascript autocomplete combobox jquery


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,但是接下来呢?之后提交表单以某种方式给了我错误的价值
    • 在这种情况下,你能不抽象出 onselect 或 onchange 处理程序内部的函数并在单击提交按钮时调用它吗?
    • 我不能,因为在这个函数中我得到了一个当前的对象上下文(我有 3 个自动完成框),点击后它会出错
    【解决方案2】:

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

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

    【讨论】:

    • 你是对的我设置了一个城市-地区-国家的ID,但是你建议发送一个标题然后比较是行不通的,因为不同国家的许多城市有相同的名字,但不同的ID在数据库中。它可以通过组合框来解决,但不是当名称只是手动输入时
    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 2011-09-19
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2015-03-25
    相关资源
    最近更新 更多