代码之家  ›  专栏  ›  技术社区  ›  myalo

JQuery-显示()然后焦点()不能按预期工作

  •  2
  • myalo  · 技术社区  · 13 年前

    这是剧本

    <script src="Scripts/jquery-1.7.min.js" type="text/javascript"></script>
       <script type="text/javascript">
       $(document).ready(function() {
            $('input[type="text"]').blur(function() {
            
                $(this).removeClass("focus");
                var a = $(this).context.id;
    
                if (a.indexOf('guest') > 0)
                {
                    if ($(this).val()&&$(this).val()!=0)
                        {
                            //$(this).parent().parent().next().show();      
                            var b = $(this).parent().parent().next().children().find("textarea");
                            b.parent().parent().show();
                            b.addClass("focus");
                            b.focus();
                        }
                        
                                        
                    else
                        {
                            $(this).parent().parent().next().children().find("textarea").val('');
                            $(this).parent().parent().next().hide();}       
                }
            });
        
        });
    </script>
    

    这是HTML

    <table width="620" border="1">
      <tr>
         <td>&nbsp;</td>
         <td style="width:40%"> Memebers $40 </td>
         <td style="width:40%"> Each guest $45 </td>
      </tr>
      <tr>
         <td><input name="breakfast1" type="checkbox" value="breakfast1" tabindex="0" /></td>
         <td>September 12, 2012</td>
         <td style="width:50%">How many guests
            <input type="text" maxlength="2" size="3" id="1guest" name="1guest" tabindex="1" />
         </td>
      </tr>
      <tr style="display:none">
         <td colspan="2">&nbsp;</td>
         <td>
            <textarea class="guests" style="width:300px;" id="1mguests" name="1mguests"  rows="4" tabindex="2">   </textarea>
            <br /><span></span>
         </td>
      </tr>    </table>    and so on<br/>
    

    我想完成什么: 当从1guest文本字段中跳出来时,检查输入字段是否有内容,如果有,取消隐藏(显示)下一个tr,并将焦点设置为该tr中的文本区域。

    问题是什么: 当在1guest输入字段中输入guest的数量并从中按TAB键时,隐藏的tr显示OK,tr中的文本区域输入会得到class。focus BUT不会得到foucs。可能是什么问题?是因为TAB是在焦点之后应用的,因此进入下一个输入字段吗? 无论如何,你能为我试图实现的目标提出一个解决方案吗?

    谢谢

    1 回复  |  直到 5 年前
        1
  •  4
  •   Fraser    13 年前

    可能是.show()依次执行,但在addClass()和focus()之后完成

    试试这个:

    b.parent().parent().show(function(){
         b.addClass("focus");
         b.focus();
    });