用焦点调出iOS键盘()

时间:2014-03-30 23:57:20

标签: jquery ios

我正在开发一个jquery填字游戏插件,对于iOS版本,我有它,以便在单击一个单元格时调用一个函数,该函数使用.focus()来触摸屏幕键盘。我也设置它,以便当按下一个字母键时,它将移动到下一个单元格并调用相同的单击事件并准备输入。这在PC上工作正常,但由于某种原因,定期点击会调出键盘,但在按下键后调用键盘时则不会。单元格是div,里面没有输入标签。

这是我的代码:

function cellClick( event )
{

moveToCell( "#" + event.currentTarget.id );

_cwo.onWord = false;
var dir = getNewDirection(_cwo.currRow, _cwo.currCol);
_cwo.direction = dir;

alignClue( "A", _cwo.clues["across"] );
alignClue( "D", _cwo.clues["down"] );

};

function moveToCell( id ) // put the cursor in the given cell
{
  $( _cwo.currCell).css( 'background-color', 'white');
  $( id).css( 'background-color', _cwo.currentCellColor );

  _cwo.currRow = $(id).data('row');
  _cwo.currCol = $(id).data('col');
  _cwo.currCell = "#" + cellID( _cwo.currRow, _cwo.currCol );
  $(_cwo.currCell).focus();

};


function keyUp( event )
{

if ( event.currentTarget.tagName != "HTML" ) return;

if(event.which == 13){
    var dir = getDirection(_cwo.currRow, _cwo.currCol);
    if(dir == "across")goAcross(true);
    else
    goDown(true);
}

if (
( 32 == event.which ) ||
( ( 64 < event.which ) && ( event.which < 91 ) ) ||
( ( 96 < event.which ) && ( event.which < 123 ) )
)
{

_char = codeToChar( event.which );
if ( _char == _cwo.NA ) return;
$( _cwo.currCell).data( 'player', _char );
paintCell( _cwo.currCell, 'player');


if( _cwo.direction == 'across')goAcross( false ); 
if( _cwo.direction == 'down')goDown();
}


alignClue( "A", _cwo.clues["across"] );
alignClue( "D", _cwo.clues["down"] );
$("#" + cellID( _cwo.currRow, _cwo.currCol )).click();   //calls cellClick

};

//Will prevent keys from being repeated on input
$('*').keydown(function(e){
    e.preventDefault();
});

1 个答案:

答案 0 :(得分:0)

这似乎与我一直有同样的问题,这也在这里讨论过: Mobile Safari Autofocus text field

该讨论的结果是缺乏能够以编程方式聚焦元素是一个深思熟虑的设计决策,并且源于iOS中UIWebView类的这个属性: https://developer.apple.com/library/ios/documentation/uikit/reference/UIWebView_Class/Reference/Reference.html#//apple_ref/occ/instp/UIWebView/keyboardDisplayRequiresUserAction

有一个有趣的说明是web&#34; apps&#34;默认情况下,添加到主屏幕允许绕过此限制。

可以点击按钮(用户发起的实际点击事件)事件,然后调用.focus();事件。如果您以编程方式调用单击处理程序 - 甚至从例如。在键盘事件处理程序(如按键)中,iOS将聚焦该字段但忽略键盘。

我在研究这个问题的同时正在进行一些测试实验: http://codepen.io/anon/pen/FLpJD

在所有情况下,您都可以看到按钮允许您将第二个字段聚焦在iOS设备上,但不能通过我尝试过的任何变体的keyPress事件聚焦。

所以看起来 - 至少暂时 - 这是无法解决的。如果Apple放松关键新闻事件的方式与放松点击事件的方式相同,那将是理想的选择。