0

我有一个工作应用程序,问题是某些页面需要 30 多秒才能在某些设备上加载。我正在使用 jQuery 1.9.1、jQuery Mobile 1.3.1 和 Phonegap 2.5.0。

我有一个将值枚举为单个复选框列表的页面。有一个click事件和一个taphold事件。这在 PC 或 iPhone 5 上效果很好。问题是,只有 300 个条目,在 iPhone 4 上需要 13 秒,在 2 岁的 LG Optimus V 上需要超过 33 秒。现在,我知道这些手机有点旧的,但这太疯狂了。

所以,我打算用 HTML 和 CSS 来复制它。我的外观和感觉都很差,但我无法通过假按钮的实际“点击”来快速选中复选框。我看起来是正确的,在 3 秒内加载到任何设备上,但单击复选框后需要 5 秒才能更改。我选择了带有元素事件的表格,因为 DIV 存在文本格式问题,但我不喜欢表格。

这是我的事件代码:

var $tr = $('#listDIV tr');

$tr.on( 'click', function(e) {
    $("#exclusionsCheckbox-" + $(this).prop('id') ).click();
    e.stopPropagation();
}); 

$tr.on( 'taphold', function(e) {
    shareActivity( $(this).prop('id'), $(this).prop('title') );     
    e.preventDefault();
    e.stopPropagation();
    return false;
});

这是我的表格行的示例:

<tr id="1" title="Test-1">
  <td width="40">
    <div class="squaredThree">
      <input type="checkbox" data-role="none" id="exclusionsCheckbox-1" checked="">
      <label for="exclusionsCheckbox-1" onclick="return false;"></label>
    </div>
  </td>
  <td><h6>Test 1</h6></td>
</tr>

taphold 事件完美运行,但单击要么不起作用,要么需要大约 5 秒才能实际更改复选框值。

有什么想法吗?

4

1 回答 1

0

好的,它看起来像女巫的酿造 a.) 关闭 s' 和 checkboxes 的事件处理程序,b.) 从 click 事件返回 false,以及 c.) 使用 .prop() 而不是 .click() 做了诡计:

var $tr = $('#listDIV tr'),
    $inputs = $('#listDIV input');

// Turn off Event Handlers
$tr.off();
$inputs.off();

$tr.click(function(e) {
    if (e.target.type !== 'checkbox') 
    {
        var $checkbox = $("#exclusionsCheckbox-" + $(this).prop('id') );
        $checkbox.prop('checked', !$checkbox.prop('checked'));
        e.stopPropagation();
        return false;
    }
});

$tr.on( 'taphold', function(e) {
    shareActivity( $(this).prop('id'), $(this).prop('title') );     
    e.preventDefault();
    e.stopPropagation();
    return false;
});
于 2013-05-29T01:51:30.890 回答