jQuery:val()更新太晚了

时间:2010-01-19 21:39:12

标签: jquery field

更新:其他一些代码出现问题。

我正在尝试获取某些输入文本字段的值。问题是我通过

获得的价值
my_val = $('#MyInput').val();

并未真正更新。

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

另一方面,如果我在字段'foo'中写字,点击SOMEWHERE ELSE,然后点击触发脚本的元素,那么我得到my_val ='foo'。

看起来Firefox仅在模糊时更新val。有没有办法获得正确的价值? (不,$('#MyInput')。blur()不起作用。)

编辑:我按要求添加更多信息。我目前在Ubuntu 9.10上使用Firefox 3.5,但最新的Chrome测试版也是如此。

最简单的例子是

<p>Bar</p>
<form>
<input type="text" id="input" />
</form>

然后是

的Javascript
$('p').click(function() {
    my_val = $('#input').val();
    alert(my_val);
});

尝试在输入中写一些内容,然后单击该段而不离开该字段。

EDIT2:没关系,这是其他一些干扰的代码。抱歉浪费你的时间: - (

2 个答案:

答案 0 :(得分:2)

只需在输入中使用.keyup()事件处理程序,每次内容更改时都更改变量:

var my_val;

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

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

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

答案 1 :(得分:0)

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

您需要手动聚焦其他元素,如下所示:

document.getElementById('something').focus();

如果你使用jQuery执行此操作,则需要编写[0]以便调用DOM focus方法,而不是jQuery focus方法。
例如:

$('input')[0].focus();