2012-03-28 8 views
0

シフトキーがkeydown状態(模倣している)にある間にクリックされるという条件を満たし、イベントを無効にしない場合にのみ、jQuery UIイベントを発生させようとしています。同時にドラッグ可能なjQueryイベントをクリックしてキーダウンしますか?

この例では、jQuery UIの.draggableを使用して、ユーザーがshiftキーを押しながら保持している場合にのみコンテナdivをドラッグします。

http://jsfiddle.net/zEfyC/

非作業コード、これはこのまたは何が悪いのを行うための最善の方法であるかどうかわかりません。

$(document).click(function(e) { 

    $('.container').keydown(function() { 
     if (e.shiftKey) { 
      $('.container').draggable(); 
     } else { 
      $('.container').draggable({ 
       disabled: true 
      }); 
     } 
    }); 
});​ 

答えて

2

このコードでは多くのエラーが発生します。まず、キーリスナーをクリックした後でのみ、そのキーリスナーを追加します。次に、文書全体ではなく、コンテナdivにkeydownを追加します。シフトキーを放すとドラッグ可能性を無効にする必要があるので、keyupを聞く必要があります。シフトがダウンしている場合は、disabled:falseも渡す必要があります。あなたのハンドラにeパラメータがありません。おかげで、コードが台無しにされたので、簡単なデモで

$(function(e) { 
    var handler = function(e) { 
     if (e.shiftKey) { 
      $('.container').draggable({ 
       disabled: false 
      }); 
     } else { 
      $('.container').draggable({ 
       disabled: true 
      }); 
     } 
    }; 
    $(document).keydown(handler); 
    $(document).keyup(handler); 
}); 
+0

作品罰金が、シフトが解除されると、実際の使用状況では、より一層不透明になるいくつかの理由で1 draggable.png画像のために、奇妙な問題が発生します。これを試してみてくださいまた、ページ上の他の関連しないドラッグ可能なイベントを無効にしました。 – Wyck

+0

これは、アイテムをドラッグ可能にするとき、またはドラッグ可能なアイテムを無効にするときにjQuery UIによって適用されるCSSスタイルによるものだと思います。おそらく、それらをオーバーライドすることができます(jQueryに別のクラスを使用するように指示するか、要素に独自のスタイルを定義することによって) – webjprgm

+0

あなたの権利を失って、 'opacity:.35; フィルタ:アルファ(不透明度= 35); '、他の問題は解決しました、私はそれを乗り越えなければならないと思います。 – Wyck

関連する問題