Javascript jquery:$(输入).keydown无法在单选按钮上设置处理程序,相同的代码适用于文本

Javascript jquery:$(输入).keydown无法在单选按钮上设置处理程序,相同的代码适用于文本,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我有一个很长的表单,它被分解成jquery accordion面板中的部分。当用户在一个面板中填写完表单后,他们会转到下一个面板并在那里填写表单。手风琴把长形分成几步。但是,当用户在一个面板上完成最后一次输入时,按tab键不会将他们带到下一个面板中的下一个字段,除非我以编程方式这样做。对于文本类型的输入,以下代码运行良好。但是,如果输入为无线电类型,则不工作。下面的代码首先将按键功能分配给文本框,然后未能将其分配给一组三个单选按钮,然后再次成功将其分配给文本框 令人沮丧的是,如果我将中间块复制并

我有一个很长的表单,它被分解成jquery accordion面板中的部分。当用户在一个面板中填写完表单后,他们会转到下一个面板并在那里填写表单。手风琴把长形分成几步。但是,当用户在一个面板上完成最后一次输入时,按tab键不会将他们带到下一个面板中的下一个字段,除非我以编程方式这样做。对于文本类型的输入,以下代码运行良好。但是,如果输入为无线电类型,则不工作。下面的代码首先将按键功能分配给文本框,然后未能将其分配给一组三个单选按钮,然后再次成功将其分配给文本框

令人沮丧的是,如果我将中间块复制并粘贴到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>

电话(收件人)*
运输选择
一旦发货,时间是估计的。
标准
储户
加快

以下是更新后的jQuery脚本:

$(document).ready(function(){
$('#f-phone').keydown(function(e){
    var code = e.keyCode || e.which;
    if ( code === 9) {
        my_accordion.accordion("option", "active", 3);
    }
});

$('input:radio[name=shipping_method]').keydown(function(e){
    var code = e.keyCode || e.which;
    console.log('code is '+code);
    alert('code is '+code);
});

$('#f-special_instructions').keydown(function(e){
    var code = e.keyCode || e.which;
    if ( code === 9) {
        my_accordion.accordion("option", "active", 5);
    }
}); });
您可以在fiddler中查看:


您只在单选按钮上附加了“keydown”事件。您还可以将“单击”或“更改”事件附加到单选按钮。

我注意到,即使通过javascript控制台应用处理程序,它也会在关闭accordion面板时消失。因此,我相信这个问题没有解决方案,除非它像一位评论员所说的那样,在不同的级别上处理击键。

我会在整个表单上放置keydown处理程序。当它检测到div中的最后一个元素时,就转到下一个元素。谢谢你的代码。我将其复制并粘贴到document.ready处理程序中,它似乎并不比我的原始代码更好。我的猜测是,添加“:radio”不会添加任何内容,因为没有它,选择器已经正确且足够了。如果它在fiddler中工作,那么它必须与在控制台行中输入时的工作相同,对吗?doc.ready处理程序将onkeydown处理程序附加到其他输入,这些单选按钮有什么问题吗?您是否尝试过将“document.onReady(function()”更改为“$(document.ready(function()”)哦,更改为“onReady”,在问题中,是一个输入错误。代码实际上正如您所建议的。您使用的是哪个版本的jQuery库?可以尝试使用下面的确切代码:$(document).ready(function(){$('input:radio[name=shipping_method]')。keydown(function(e){var code=e.keyCode | | e.which;console.log('code is'+code);alert('code is'+code);});});还要检查页面上是否存在其他javascript错误。