【发布时间】:2015-02-09 23:39:50
【问题描述】:
我有一个很长的表单,它被分成 jquery 手风琴面板中的部分。当用户在一个面板中填写完表格后,他们会转到下一个面板并在那里填写表格。手风琴将长形分解为多个步骤。但是,当用户在一个面板上完成最后一个输入时,按下 tab 键不会将他们带到下一个面板中的下一个字段,除非我以编程方式进行。对于文本类型的输入,以下代码运行良好。但是,在输入是无线电类型的地方,它不起作用。以下代码首先将 keydown 函数分配给文本框,然后未能将其分配给一组三个单选按钮,然后再次成功将其分配给文本框。
令人沮丧的是,如果我将中间块复制并粘贴到 chrome javascript 控制台中,它就会像魅力一样工作。
那么,有什么问题呢?
document.onReady(function(){
$('#f-phone').keydown(function(e){
var code = e.keyCode || e.which;
if ( code === 9) {
my_accordion.accordion("option", "active", 3);
}
});
$('input[name=shipping_method]').keydown(function(e){
var code = e.keyCode || e.which;
console.log('code is '+code);
});
$('#f-special_instructions').keydown(function(e){
var code = e.keyCode || e.which;
if ( code === 9) {
my_accordion.accordion("option", "active", 5);
}
});
});
HTML 如下:
<div class="row">
<label class="req" for="f-shipping_phone" id="label-shipping-phone">Phone (Recipient)<span style="color:red;">*</span> </label>
<input type="text" name="shipping_phone" size="35" maxlength="35" autocomplete="telephone-full" class="addr_phone" id="f-shipping_phone" />
</div>
<h2 id="ship-options" id="h2_shipping">Shipping Options</h2>
<div class="rowSet" id="checkout-shipping-level">
<div class="row" id="shipping_type">
<table cellpadding="0" cellspacing="0" style="width:300px">
<caption>Times are estimates once shipped.</caption>
<tr align="center" valign="top">
<td>
<input name="shipping_method" type="radio" value="4" id="ship4" >
</td> <td>
<label for="ship4">Standard</label>
</td>
</tr>
<tr align="center" valign="top">
<td>
<input name="shipping_method" type="radio" value="7" id="ship7" checked="checked">
</td> <td>
<label for="ship7">Saver</label>
</td>
</tr>
<tr align="center" valign="top">
<td>
<input name="shipping_method" type="radio" value="2" id="ship2" >
</td> <td>
<label for="ship2">Expedited</label>
</td>
</tr>
</table>
</div>
【问题讨论】:
-
我会将 keydown 处理程序放在整个表单上。当它检测到 div 中的最后一个元素时,然后移动到下一个。
标签: javascript jquery html forms