我创建了一个列表,当单击某个项目时,会显示一个弹出窗口。
在移动设备上使用代码时(屏幕相对较小),问题就出现了。当一个列表项被击中时,经常会弹出一个popop中的按钮。
在用户意识到弹出窗口甚至显示之前,停用按钮的最佳方法是什么?
尝试code here。
HTML代码:
<div data-role="page" id="kon">
<div data-role="content">
<ul data-role="listview" id="kon_list" data-icon="false">
</ul>
<div data-role="popup" id="contactMsgBox" data-transition="pop">
<div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
<h3 class="ui-title">Ansprechpartner kontaktieren</h3>
<a href="#" data-role="button" data-inline="true" data-rel="back" data-theme="c" style="width:95%">Anrufen</a> <br />
<a href="#" data-role="button" data-inline="true" data-rel="back" data-theme="c" style="width:95%">E-Mail senden</a> <br />
<a href="#" data-role="button" data-inline="true" data-rel="back" data-transition="flow" data-theme="b" style="width:95%">Abbrechen</a>
</div>
</div>
</div>
</div>
JS代码:
kontakts = JSON.parse('[{"mail":"test@test.de",'+
'"name":"test test","ort":"Stuttgart","tel":"0123 1234-123"},{"mail":"test2@test.de",'+
'"name":"test2 test2","ort":"Lauf","tel":"0123 1234-123"}]');
var listHTML = "";
for(var i=0; i<kontakts.length; i++)
{
//set the menu item
listHTML = listHTML + "<li tel='"+kontakts[i].tel+
"' mail='"+kontakts[i].mail.toLowerCase()+"'><h3>" + kontakts[i].ort +
"</h3><p>" + kontakts[i].name + "<br />Telefon\t" + kontakts[i].tel +
"<br />E-Mail\t" + kontakts[i].mail.toLowerCase() + "</p></li>";
}
//set items and reload
$('#kon_list').html(listHTML);
$('#kon_list').listview('refresh');
//bind list items
$('#kon_list').children('li').bind('touchstart mousedown', function(e) {
//alert('Selected Tel=' + $(this).attr('tel') + 'Mail=' + $(this).attr('mail'));
$("#contactMsgBox").popup("open");
});
答案 0 :(得分:1)
你可以改变
$('#kon_list').children('li').bind('touchstart mousedown', function(e) {
到
$('#kon_list').children('li').bind('vclick', function(e) {
这样,在用户抬起手指或释放鼠标按钮之前,弹出窗口不会显示。
答案 1 :(得分:0)
问题正在发生,因为移动浏览器会在您点击按钮触发点击事件时等待大约300毫秒(显然是三星Galaxy s2上500毫秒)。此等待导致两者都被轻击,项目和弹出按钮。
解决方案是阻止浏览器等待。这可以通过fastclick library
来完成