在使用javascript聚焦后立即在Android上输入松散焦点

前端之家收集整理的这篇文章主要介绍了在使用javascript聚焦后立即在Android上输入松散焦点前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在使用AngularJS开发Ionic App.

我得到了很少的输入(登录/注册的东西),当按下Enter键时 – 在Android上的按钮和等效的iOS-这是KeyCode 13,它关注下一个输入并帮助自定义指令.

它在网络浏览器上运行得非常好,但在手机上,它会聚焦下一个输入,然后焦点会立即丢失,键盘会自行隐藏,迫使用户再次点击输入.

这是HTML:

logo.png" width="auto" height="30%" style="display: block; margin-left: auto; margin-right: auto;">
    

这是指令:

directive('focusMe',function() {
return {
    link: function (scope,element,attrs) {
        scope.$watch(attrs.focusMe,function (value) {
            if (value === true) {
                element[0].focus();
            }
        });
    }
};

以下是涉及的控制器方法

$scope.inputKeyEvent = function(event,inputId)
{
    $scope.response = event.keyCode;
    if (event.keyCode == 13)
    {
        $scope.currentInput = inputId + 1;
        if ($scope.currentInput == 2 && !$scope.isSignUp)
            $scope.signin();
        else if ($scope.currentInput == 3 && $scope.isSignUp)
            $scope.signup();
    }
}

谢谢你的帮助 !

编辑

问题是我的genymotion模拟器,它确实在真正的手机上工作(至少我的.)

最佳答案
我认为你应该在未聚焦的元素之前调用blur()方法.
我在离子和科尔多瓦做过它,它完美无缺.

此外,将focus()包装在超时中的下一个元素上(角度版本为$timeout或vanillajs为setTimeout),因此焦点将在另一个范围内执行,并且在模糊完成后执行.

你应该有这样的东西:

$scope.inputKeyEvent = function(event,id) {
    // prevent default 
    event.preventDefault();

    // blur on the unfocused element
    event.target.blur();

    // focus on next element
    // wrapped in timeout so it will run
    // in "another thread" 
    $timeout(function() {
      // If you want to follow all angular best practices
      // Make a broadcast and read the event in the link function
      // of your directive
      var obj = document.getElementById(nextId);

      // Check if object exists
      if(obj) {
       obj.focus();
      }

    });
}
原文链接:https://www.f2er.com/js/429019.html

猜你在找的JavaScript相关文章