5

当页面检测到它在 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>
4

1 回答 1

1

我认为您应该重新编写一些代码,以使其更容易实现您想要的。

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

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

<?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 
});
于 2013-06-19T11:57:18.927 回答