(对不起我的英文)
嗨!,我在一个应用程序中使用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并专注于按钮。
答案 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();
});