使用IOS / Android等时,更改ondblclick到onclick事件

时间:2013-06-19 11:47:45

标签: php javascript jquery

当页面在IOS / Android上检测到它时,如何将 ondblclick 事件更改为 onclick 事件。难以理解的是我不能只调用ID因为它将数据从数据库传递到Javascript函数。

检查出来。

服务器侧

<?php         
echo '<table>';
while($row=mysql_fetch_array($query)){
    echo '<tr><td ondblclick="sampFunc("'.$row[0].'","'.$row[1].'")">';
        echo $row[0];
    echo '</td></tr>'; 
}
echo '</table>';
?>

客户端:

<script>
$(document).ready(function(){
    if(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent)){
        /* ?????????????????? */
    }
});
function sampFunc(data1,data2){
    //-- Something
}
</script>

1 个答案:

答案 0 :(得分:1)

我认为您应该重新编写一些代码,以便更轻松地实现您想要的目标。

尝试嗅探用户代理并不是一个好主意。设备可以更换,可以启动新的操作系统,并且需要更多维护。特征检测是一种更好的方法,因为它涵盖了现在和未来的设备,并最大限度地减少了误报。

更新的PHP现在使用HTML5 data-*属性并删除内联事件:

<?php         
echo '<table class="myclass">';
while($row=mysql_fetch_array($query)){
    echo '<tr><td data-a="'.$row[0].'" data-b="'.$row[1].'">';
        echo $row[0];
    echo '</td></tr>'; 
}
echo '</table>';
?>

新JS检查它是否是触摸屏设备,并将变量touchDevice定义为truefalse,具体取决于它。然后使用此var来定义事件。如果是true(设备具有触控功能),则click为事件,否则为dblclick

事件处理程序现在使用.on()而不是内联定义,它使用.data()函数。

<script>
var touchDevice = !!('ontouchstart' in window) || !!('onmsgesturechange' in window);

$(document).ready(function(){
    var dblevent = touchDevice ? 'click' : 'dblclick';
    $('.myclass td').on(dblevent, function(){
        var data1 = $(this).data('a'), data2 = $(this).data('b');
         //-- Something
    });   
});
</script>

或仅使用更新的PHP和doubletap事件:

$('.myclass td').on('dblclick doubletap', function(){
      var data1 = $(this).data('a'), data2 = $(this).data('b');
      //-- Something 
});