jQuery:val()更新得太晚

jQuery:val()更新得太晚,jquery,field,Jquery,Field,更新:其他一些代码有问题 我试图获取一些输入文本字段的值。问题是我通过 my_val = $('#MyInput').val(); 没有真正更新 如果我在字段“foo”中写入,然后单击触发脚本的元素,那么我将得到我的_val=undefined 另一方面,如果我在字段'foo'中写入,单击其他地方,然后单击触发脚本的元素,那么我得到我的_val='foo' 看起来Firefox只在blur上更新val。有没有办法得到正确的值?(否,$('#MyInput').blur()不起作用) 编辑:我根

更新:其他一些代码有问题

我试图获取一些输入文本字段的值。问题是我通过

my_val = $('#MyInput').val();
没有真正更新

如果我在字段“foo”中写入,然后单击触发脚本的元素,那么我将得到我的_val=undefined

另一方面,如果我在字段'foo'中写入,单击其他地方,然后单击触发脚本的元素,那么我得到我的_val='foo'

看起来Firefox只在blur上更新val。有没有办法得到正确的值?(否,$('#MyInput').blur()不起作用)

编辑:我根据要求添加更多信息。我目前在Ubuntu9.10上使用Firefox3.5,但在最新的Chrome测试版上也同样如此

最简单的例子是

<p>Bar</p>
<form>
<input type="text" id="input" />
</form>
尝试在输入中写入一些内容,然后在不离开字段的情况下单击段落


EDIT2:没关系,是其他代码干扰了。很抱歉浪费您的时间:-(

调用jQuery的
blur
focus
方法将调用为事件注册的所有事件处理程序,但实际上不会更改焦点

您需要手动聚焦不同的元素,如下所示:

document.getElementById('something').focus();
如果使用jQuery执行此操作,则需要编写
[0]
,以便调用DOM
focus
方法,而不是jQuery
focus
方法。
例如:

$('input')[0].focus();
每次内容更改时,只需在输入上使用
.keyup()
事件处理程序即可更改变量:

var my_val;

$('#MyInput').keyup(function() {
    my_val = $(this).val();
});

$('p').click(function() {
    alert(my_val);
});

请注意,
.change()
将不起作用,因为它也只在模糊上触发。

它对我来说很好…(任何特定的浏览器都会失败?)请提供更多关于这方面的信息(代码)。您的代码运行在哪个事件处理程序中?因此,显然可以单击而不在输入上触发模糊()。在任何情况下,请使用.keyup()正如我的回答,它会更新。我相信
focus
blur
确实会触发这些事件,只要它们不是事件处理程序的一部分。看。实际上,我有一个这样的脚本在工作。嗯……我希望它能工作,但事实并非如此。通过它,我可以模糊字段,或将焦点交给另一个,但无论如何我的值仍然没有定义。:-(@carillonator:See,它明确地说他们没有。我检查了源代码,看它是否在1.4中发生了更改,但我没有看到任何代码可以更改它。@SLaks,我知道你在说什么(不完全理解它在说什么),但我只是尝试了一下,它就像我说的那样工作,将光标放在输入框中并给它焦点:
$('some#u link')。单击(function(){$('some#u input').focus()})
1.4,但前几天我在1.3.2中使用了类似的功能。
var my_val;

$('#MyInput').keyup(function() {
    my_val = $(this).val();
});

$('p').click(function() {
    alert(my_val);
});