5

ページがIOS/Androidなどで検出したときにondblclickイベントをonclickイベントに変更するにはどうすればよいですか。データベースからJavascript関数にデータを運ぶため、要素のIDを呼び出すことができないのは難しいことです。

見てみな。

サーバ側:

<?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

目的を達成しやすくするために、コードの一部を書き直す必要があると思います。

ユーザー エージェントをスニッフィングしようとするのは良い考えではありません。デバイスは変更される可能性があり、新しい OS が起動される可能性があり、エンドでより多くのメンテナンスが必要になります。機能検出は、現在および将来のデバイスをカバーし、誤検知を最小限に抑えるため、はるかに優れたアプローチです。

更新された 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を定義します。この var は、イベントの定義に使用されます。(デバイスがタッチ可能) の場合はイベント、そうでない場合はです。truefalsetrueclickdblclick

イベント ハンドラーは.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 に答える