【问题标题】:jquery.mobile "tap" fired "focus" eventjquery.mobile "tap" 触发 "focus" 事件
【发布时间】:2013-03-01 07:27:44
【问题描述】:

“点击”到 jquery.mobile 的事件存在问题。当在项目上“点击”时,项目被隐藏,它会在位于项目下方的 INPUT 字段上触发事件“焦点”。 我怎样才能使焦点事件不被触发? 这是一个小示例代码。

<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.css" />
  <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
  <script src="http://code.jquery.com/mobile/1.2.0/jquery.mobile-1.2.0.min.js"></script>
  <style>
    .drop {
      position: fixed;
      left: 0;
      top: 0;
      width: 100%;
      z-index: 100;
      padding: 0 0 1px;
    }
    .drop .holder {
      overflow: hidden;
      padding: 10px 10px 3px;
      margin: 0 24px -2px;
      background: #1c365b;
    }
    a {font-size: 24px;}
  </style>
</head>
<body>
  <form action="#" id="form">
    <input type="text" name="input 1">
    <input type="text" name="input 2">
    <input type="text" name="input 3">
  </form>
  <div class="drop">
    <div class="holder">
      <a>Link 1</a><br>
      <a>Link 2</a><br>
      <a>Link 3</a><br>
    </div>
  </div>
  <div id="console"></div>
  <script>
    $(function () {
      var console = $('#console');
      $('.drop').find('a').unbind('tap').bind('tap', function (e) {
        console.append(' tap on drop menu');
        $('.drop').hide();
        return false;
      });
      $('#form').find('input').unbind('focus').bind('focus', function (e) {
        console.append(' focus on ' + $(e.target).attr('name'));
      });
    });
  </script>
</body>

隐藏掉落后获得:

<div id="console">tap on drop menu focus on input 2</div>

stopImmediatePropagation() 方法没有帮助。

【问题讨论】:

    标签: javascript jquery cordova jquery-mobile mobile


    【解决方案1】:

    在 JSFiddle 中使用您的确切代码,我没有得到您遇到的问题。 我已经在桌面浏览器和我的 S3 上的 chrome 浏览器中尝试过这个。

    覆盖的 div 消失并触发点击事件,但焦点事件不会触发,直到您在覆盖消失后选择其中一个输入框。

    http://jsfiddle.net/U9bYR/

    我更改的唯一代码是删除事件代码中不必要的方法。

    $(function () {
      var console = $('#console');
      $('.drop').bind('tap', function (e) {
        console.append(' tap on drop menu');
        $('.drop').hide();
        return false;
      });
    $('#form').find("input").bind('focus', function (e) {
        console.append(' focus on ' + $(e.target).attr('name'));
      });
    });
    

    【讨论】:

    • 在 chrome 浏览器中一切似乎都很好。我可以在“Mobile Safari”和“Opera Mobi”上重现它。我在我的项目中使用 phonegap,它使用“Safari”浏览器。
    【解决方案2】:

    可能的解决方案是我需要在点击事件(提供 jquery)上替换点击事件(提供 jquery.mobile)。

    【讨论】:

      【解决方案3】:

      我有完全相同的问题,我无法找到好的解决方案。

      我猜这是 Mobile Safari 的问题,但你是我发现的第一个和我有同样问题的人。

      临时解决方案是:禁用所有您认为隐藏在您将要单击的按钮下的字段。

      在煎茶中是这样的:

      disableFields: function() {
          this.enableFieldsFunc(); //lets make sure all fields were switched back to default values
          this.disableAllFields();  //and then disable them
      },
      disableAllFields: function() {
          fields = Ext.ComponentQuery.query('field');
          for(var i = 0; i<fields.length; i++) {
              var field = fields[i];
              if(field.getComponent() && field.getComponent().input && field.getComponent().input.dom && field.getComponent().input.dom) {
                  field.wasDisabledBefore = field.getComponent().input.dom.disabled;
                  field.getComponent().input.dom.disabled = true;
              }
          }
      },
      enableFields: function() {
          Ext.create('Ext.util.DelayedTask', this.enableFieldsFunc, this).delay(100);
      },
      enableFieldsFunc: function() {
          fields = Ext.ComponentQuery.query('field');
          for(var i = 0; i<fields.length; i++) {
              var field = fields[i];
              var disabled = field.wasDisabledBefore;
              if(typeof disabled != 'undefined') {
                  field.getComponent().input.dom.disabled = disabled;
              }
          }
      }
      

      对于 pressedreleased 事件,我将调用 disableFieldsenableFields

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-19
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2014-05-07
        • 2012-03-03
        • 1970-01-01
        相关资源
        最近更新 更多