1

我在页面的标题部分使用 2 个锚标记,我想在它们上捕获点击事件,以便我可以打开面板。如果我使用按钮而不是锚标签,我可以用它们的 id 轻松捕捉它们,例如;

 $(document).on('click', function(evt){
        var target = evt.target;
        var targetId = target.getAttribute('id');

        if(targetId === 'openRightPanel'){
            $('.right-panel').panel('open');
            evt.stopImmediatePropagation();
            evt.preventDefault();
        }
}

但是如果我使用锚标签,我就无法获得这样的点击事件;

if(targetId === 'openRightPanel'){
            $('.right-panel').panel('open');
            evt.stopImmediatePropagation();
            evt.preventDefault();
}

即使我的锚标签的 id 是 openRightPanel。

我意识到 jQuery mobile 正在我的 html 中创建一些新的 div,所以我开始使用这段代码来捕获该点击事件;

    while (target !== null) {
                if(target['id'] === 'openLeftPanel'){
                    $('.left-panel').panel('open');
                    isPreventOn = true;
                }
                else if(target['id'] === 'openRightPanel'){
                    $('.right-panel').panel('open');
                    isPreventOn = true;
                }
                target = target.parentNode;
            }

这个工作正常,但在 android 4.1 上产生了一些问题,并且有一个 while 循环来捕捉点击事件对我来说似乎不合适。

所以我的问题是如何在没有循环的情况下捕获对jQuery mobile中的这些锚标记进行的点击事件,或者是否有不同的方法来获取该事件?这些是我想要得到的锚标签;

<div data-role="header">
    <h1>title</h1>
    <a id="openLeftPanel">open</a>
    <a id="openRightPanel">open</a>
</div><!-- /header -->
4

2 回答 2

0

您可以直接在选择器上设置点击事件

$("#openLeftPanel").off('click').on('click', function(evt){

});

$("#openRightPanel").off('click').on('click', function(evt){

});
于 2013-07-23T04:07:57.563 回答
0

不要将点击事件附加到文档,将其附加到锚元素。

你有:

$(document).on('click', function(evt){...});

你应该有:

$('[data-role="header"] a').on('click',function(evt){...});

或者,只需将两者的功能分开:

$('#openLeftPanel').on('click',function(evt){...});
$('#openRightPanel').on('click',function(evt){...});
于 2013-07-23T04:09:27.320 回答