jQuery改变焦点在tab或focusout上

时间:2012-02-21 13:46:19

标签: javascript jquery firefox

(对不起我的英文)

嗨!,我在一个应用程序中使用jquery,其中我有一个dinamycally创建的表,其中包含文本输入,如下所示:

<td><input type="text" id="code"></td>
<td><select id="type"><option value="0">Normal</option><option value="1">Other</option></select></td>
<td><input type="text" id="price" class="price"></td>
<td><input type="text" id="total"></td>

在其他部分我有一个按钮,当点击这个按钮时,在表格中创建另一行。

此表和按钮的容器存在于模板内..此模板使用underscore.js

呈现

现在问题是:我需要按顺序迭代输入:代码,类型,价格。当我填写输入价格时,我计算总数并显示在输入中,然后我需要将焦点更改为按钮(#more_button)以让用户单击或按Enter键在表格中创建另一行。

我用这个:

$('.price').blur(function(e){
    _this.setTotal($(e.currentTarget).val());
    $('#more_button').removeClass('inactive').focus();

    e.preventDefault();
    e.stopPropagation();
});

当#more_button聚焦时,css背景改变。

当我执行这段代码时,按钮会改变背景,但焦点会立即改为url bar。这发生在firefox和Chrome中。

我尝试使用它来设置焦点:

   $('.price').blur(function(e){
    _this.setTotal($(e.currentTarget).val());
    $('#more_button').removeClass('inactive').;
    setTiemout(function(){
         $('#more_button').focus();
    },100);
    e.preventDefault();
    e.stopPropagation();
}); 

但是不要工作......

你能给出一些指导来完成这个吗?

当按Tab键或点击页面的其他部分时,用户可以更改input.price的焦点..此时我需要触发seTotal并专注于按钮。

3 个答案:

答案 0 :(得分:3)

我不知道简单方法是什么

$('your_selector').focusout(function(){
   $('#more_button').focus();
});

不能用Tab键(只用鼠标来改变焦点)..所以我解决了使用keydown事件和focusout之间的混合。像这样:

$('.price').bind('keydown',function(e){
    if(e.keyCode === 9){//Tab key
    tab = true;
    check(e);
        return false;
}

 }).bind('focusout',function(e){
if(!tab){
    check(e);
}else{
    tab = false;    
} 
e.preventDefault();
return false;
 });

其中 check()是验证值的函数,标签是一个标志,用于检查是否按下了标签键。

答案 1 :(得分:1)

$('your_selector').focusout(function(){
  $('#more_button').focus();
});

至少在FF和Chrome中工作。

这里有一个小提琴:http://jsfiddle.net/Zabn4/

答案 2 :(得分:0)

最现代的解决方案(jQuery 1.7+)是使用以下代码:

$('#your-input').on('focusout', function(e){
   $('#submit-btn').focus();
});