2011-12-14 11 views
0

とダイナミックマーキーツールを作成しようとする私のコードです:ここではマウスイベントjqueryの

$.fn.createBox = function(id) { 
     var ctr = 0; 

     $(id).css({ 
      cursor:'crosshair' 
     }); 

     $(id).click(function(e) { 
      if (ctr == 0) { 
       var clickLocX = e.pageX; 
       var clickLocY = e.pageY; 
       $('<div>').attr({ 
        'class':'newBox' 
       }) 
       .css({ 
        top:clickLocY, 
        left:clickLocX 
       }) 
       .appendTo(id); 

       ctr = 1; 

       if (ctr == 1) { 
        $(id).mousemove(function(e){ 
         var XpageCoord = e.pageX; 
         var YpageCoord = e.pageY; 
          window.Xloc = XpageCoord; 
          window.Yloc = YpageCoord; 
         var boxOffset = $('.newBox').offset(); 
         var boxHeight = YpageCoord - boxOffset.top; 
         var boxWidth = XpageCoord - boxOffset.left; 
         $('.newBox').css({ 
          height:boxHeight + 'px', 
          width:boxWidth + 'px' 
         }); 
         ctr = 2; 
        }); 
       } 
      } 
      else if (ctr == 2) { 
       $('.newBox').remove(); 
       $('#work_area').css({ 
        cursor: 'default' 
       }); 
      } 
      else { 
       $.noop(); 
      } 
     }); 
    } 

これのフィドルがここにもある:http://jsfiddle.net/HYQp4/1/

このコードは(私が設定した箱を生産されていませんnewBoxのCSSクラス)。誰も私にここで行方不明を教えてもらえますか?

+0

は、なぜあなたは' id'パラメータで渡しているcreateBox機能を開始する方法についてはhttp://jsfiddle.net/HYQp4/3/を参照してください?新しいjQueryラッパー関数を作成する目的を破ることはできませんか? –

+1

私は 'createBox'コードのどこにでも' this'を使用しているのを見ることができないので尋ねます。 'jQuery.fn'を単純な' jQuery'の代わりに拡張したいのは、jQueryのラップされたオブジェクトに作用する関数を作成したいからです。つまり、 '$( '#foo')。createBox()'を実行し、 '$( '#foo')'オブジェクトで 'createBox'を動作させ、何かを選択する必要がないようにしたいでしょう。主に行動するものとはまったく異なっています。 –

+0

@ RichardNeilIlagan - 良い点です...私の元の計画は、 'createBox'をある要素に付け加え、別の要素に作用させることでした。私は、コードの構造を変更するだけで、必要な要素に作用するために 'this'を使うことができることに気付きませんでした。アドバイスをいただきありがとうございます。 – dopatraman

答えて

0

私が知る限り、2つのdiv要素のIDは参照できません。 click meボックスを参照するにはjQuery( "#clickMe")、描画領域を参照するにはjQuery( "#work")を使用します。

あなたは `jQuery.fn`のプロトタイプを拡張しているとき