2012-04-19 139 views
0

我得到了这样的我的网页上一个jQuery自动完成组合框: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调用和更改隐藏字段的一些信息,但问题出现时,我只是键入的东西和没有unfocusing文本字段点击提交按钮 - change事件没有被触发,我得到一个错误的数据在服务器上(基本上我得到一个隐藏的领域,这是以前通过选择更改触发的事件设置的数据,但没有赶上最新)。那么如何在发送表单之前执行文本字段以便触发change事件?或者也许有其他方法可以捕捉并触发文本字段中的最新更改(通过某些onkeypress事件替换更改)?谢谢你的帮助。

回答

0

您可以禁用提交按钮

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

这种方式提交按钮不会提交表单和表单将获得选择或更改事件怎么把用户通过点击提交已不聚焦的默认操作按钮

+0

好的,但接下来呢?之后提交表单在某种程度上给了我错误的值 – 2012-04-20 12:32:31

+0

在这种情况下,你能不能抽象出onselect或onchange处理程序内部的函数,并在点击提交按钮时调用相同的函数? – walmik 2012-04-22 06:29:30

+0

我不能因为在这个功能iam获取当前的对象上下文(我有3个自动完成框),点击它后会出错 – 2012-04-22 23:13:39

0

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

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

+0

你是对的Iam设置城市地区国家IDS,但你建议发送一个标题然后比较将不起作用,因为不同国家的许多城市有相同的名称,但数据库中的ID不同。它可以通过组合框来解决,但不能在名称只是手工输入时解决 – 2012-04-20 10:19:26