0

私はjqueryに関数を持っています:

$('#map').click(function(e) {
    var posX = $(this).offset().left, posY = $(this).offset().top;
    if (posY < 100) {
       // do this

ユーザーがその要素内をクリックすると、実行されます。しかし、彼がカーソルキーを押した場合にも実行したいと思います。

次のようなことは可能ですか:

$('#map').click OR key.press(function(e) {

基本的に、その機能を実行するために複数のイベントを設定できますか? jqueryを学んでいるので、気楽にやってください。

アップデート

function move(e) {
   var posX = $(this).offset().left, posY = $(this).offset().top;

    if (posX > 75 && posX < 150 && posY < 75) { var go = "N"; }
    if (e.which == 38) { var go = "N"; }

    $.post("inc_map.php", { move: go }, function(data){ 
        var substr = data.split('@'); 
        if (substr[0] != "block") {
            var x1 = substr[0]; var y1 = substr[1];
            x = parseInt(x1) * 32; y = parseInt(y1) * 32;
            $("#mapview").css({ backgroundPosition: -x + "px " + -y + "px" });
                $("#map").html(substr[2]);
                $("#info").html(substr[3]);
                };
            $("#pos").html((x/32) + ', ' + (y/32)); 
        });  

};



$("#map").click(move).keypress(move);

なぜこれが機能しないのですか?:o

4

3 に答える 3

2

イベント ハンドラーの外部で関数を定義し、各ハンドラーから個別に呼び出します。

function myFunc(e) {
    var posX = $(this).offset().left, posY = $(this).offset().top;
    if (posY < 100) {

    }

    // if e.which equals 38, the up arrow was pressed
    if(e.which == 38) {
        // do nice stuff here
    }

    // the rest of your function here...
}

$("#map").click(myFunc).keypress(myFunc);

編集:jQuery関数チェーンも投入しました。

ああ、わかりました。私はあなたのエラーを見つけたと思います。私はあなたのコードを少し再フォーマットし、いくつか整理しました。これを試して:

function move(e) {
    var posX = $(this).offset().left,
    var posY = $(this).offset().top;

    var go = "";

    if (posX > 75 && posX < 150 && posY < 75) {
        go = "N";
    }

    if (e.which == 38) {
        go = "N";
    }

    $.post("inc_map.php", {
        move: go
    }, function(data) {
        var substr = data.split('@');
        if (substr[0] != "block") {
            var x1 = substr[0];
            var y1 = substr[1];
            x = parseInt(x1) * 32;
            y = parseInt(y1) * 32;
            $("#mapview").css({
                backgroundPosition: -x + "px " + -y + "px"
            });
            $("#map").html(substr[2]);
            $("#info").html(substr[3]);
        };
        $("#pos").html((x / 32) + ', ' + (y / 32));
    });

};
于 2012-04-06T23:36:29.010 に答える
0

jQuery.bind() を使用します。

複数のイベントに対して、スペース区切りのリストを .bind() に渡すことができます。

$("#map").bind("click keypress", myFunc);
于 2012-04-06T23:39:07.240 に答える
0

クリックとキー押下の間で共通のイベント ハンドラーを渡す

例えば:

function myFunc(e) {
   //For cursor
   switch(e.charCode) {
      case 37: 
         // Left
      break;
      case 37: 
         // Up
      break;
      case 37: 
         // Right
      break;
      case 37: 
         // Down
      break;
   }
}

$("#map").click(myfunc).keypress(myfunc);
于 2012-04-06T23:48:21.383 に答える