【问题标题】:jQuery Mobile focus next input on keypressjQuery Mobile 将下一个输入聚焦在按键上
【发布时间】:2011-08-18 20:47:50
【问题描述】:

我有一个带有 4 个 pin 输入框的 html 表单的 jquery 移动网站。我希望用户能够在每个输入字段中输入一个 pin,而无需按下 iphone 键盘的“下一步”按钮。我尝试了以下方法,虽然它似乎将焦点设置到第二个输入并插入值,但键盘消失了,因此用户仍然必须通过点击事件激活所需的输入。

$('#txtPin1').keypress(function() {
        $('#txtPin1').bind('change', function(){  
            $("#txtPin1").val($("#txtPin1").val()); 
        });
        $("#txtPin2").focus();
        $("#txtPin2").val('pin2');
});

我应该为 $("#txtPin2") 分配不同的事件吗?

我也尝试过实现http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/,但我发现它适用于android而不适用于iphone。

任何帮助都非常感谢。

【问题讨论】:

  • 让我澄清一下赏金问题:iOS 设备似乎不接受 focus() 和/或 select() 方法。该字段明显被选中/激活,但似乎缺少“点击”或“点击”事件来激活设备键盘。

标签: input focus jquery-mobile tap


【解决方案1】:

实时示例:http://jsfiddle.net/Q3Ap8/22/

JS:

$('.txtPin').keypress(function() {
    var value = $(this).val();

    // Let's say it's a four digit pin number
    // Value starts at zero
    if(value.length >= 3) {
        var inputs = $(this).closest('form').find(':input');
        inputs.eq( inputs.index(this)+ 1 ).focus();
    }
});

HTML:

<div data-role="page" data-theme="b" id="jqm-home">
    <div data-role="content">
        <form id="autoTab">
            <label for="name">Text Pin #1:</label>
            <input type="text" name="txtPin1" id="txtPin1" value="" class="txtPin" placeholder="Please enter Pin #1"/>

            <br />
            <label for="name">Text Pin #2:</label>
            <input type="text" name="txtPin2" id="txtPin2" value="" class="txtPin" placeholder="Please enter Pin #2"/>

            <br />
            <label for="name">Text Pin #3:</label>
            <input type="text" name="txtPin3" id="txtPin3" value="" class="txtPin" placeholder="Please enter Pin #3"/>

            <br />
            <label for="name">Text Pin #4:</label>
            <input type="text" name="txtPin4" id="txtPin4" value="" class="txtPin" placeholder="Please enter Pin #4" maxlength="4"/>
        </form>
    </div>
</div> 

【讨论】:

  • 感谢您的帮助。我尝试了您的代码,虽然焦点设置为下一个输入,但 iphone 键盘被隐藏,因此它仍然需要用户点击焦点输入框。该事件需要在 keyup 上触发,以便在移动到下一个输入之前将值写入第一个输入。有没有办法在下一个输入时触发按键?
  • 我遇到了与上述相同的问题!
【解决方案2】:

我在 android 上试过了,它可以工作。我无法在 iPhone 上查看。 检查这个:http://jsfiddle.net/Q3Ap8/276/ [直接链接:http://fiddle.jshell.net/Q3Ap8/276/show/]

$('.txtPin').keydown(function() {
    that=this;
    setTimeout(function(){
        var value = $(that).val();
        if(value.length > 3) {
        $(that).next().next().next().focus().tap();
        }
     },0);
});

适用于 android 的其他解决方案是: http://jsfiddle.net/Q3Ap8/277/ [ http://jsfiddle.net/Q3Ap8/277/show ]

$('.txtPin').keydown(function() {
    that=this;
    setTimeout(function(){
        var value = $(that).val();
        if(value.length > 3) {
        $(that).next().next().next().click();
        }
     },0);
});
$('.txtPin').click(function() {
   $(this).focus().tap();
});

【讨论】:

  • 我将在我的 iPhone 崩溃时测试这个 :)。我想我从 Cydia 安装了一个糟糕的调整,哈哈。
  • 似乎不适用于 iPhone。尝试了几件事
  • 我没有收到关于点击事件的反馈。我试过 tap(function() { alert('tapped'); });但这并没有做任何事情。我会在一分钟内尝试你的解决方案。
  • 我认为没有点击的焦点也应该有效。目前我不能做更多的测试。 AFAIR 在 iPhone 中有一个限制,该键盘只能在用户交互事件之后显示 - 所以当您在 .click 处理程序中调用 .focus() 时它应该可以工作。我不确定它是否适用于人工 .click 触发器。
  • 不幸的是它没有......感谢您到目前为止的时间。我会试试看能不能搞定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多