私はRaphaelのjavascriptライブラリをテストしていますが、小さな問題が発生します。キャンバスに4つの図形を描いています。私は、オブジェクトをクリックして現在選択されているオブジェクトにすることを許可しています。次に、削除キーを押すイベントハンドラを追加します。これはうまく動作しますが、私は関数を呼び出すことができないようです。以下は私の問題を説明するコードです。JavaScript関数を呼び出す際の問題?
これは、キャンバス上cirlcesのそれぞれを表すクラスです。
var Shape = new Class({
initialize: function(x, y, color)
{
this.shape = paper.circle(x, y, 25);
this.shape.attr("fill", color);
this.shape.click(function()
{
if(selectedObj == null)
{
selectedObj = this;
selectedObj.attr({'stroke':'orange', 'stroke-width':'5'});
}
else if(selectedObj != this)
{
selectedObj.attr({'stroke':'orange', 'stroke-width':'0'});
selectedObj = this;
selectedObj.attr({'stroke':'orange', 'stroke-width':'5'});
}
else if(selectedObj == this)
{
selectedObj.attr({'stroke':'orange', 'stroke-width':'0'});
selectedObj = null;
}
});
},
deleteThis: function()
{
alert("Inside The deleteThis() Function.");
}
});
これは、形状を作成し、クリックされたとき、それは次のようん、
selectedObj
がnullの場合クリックされた図形はselectedObj
に設定され、図形の周りに小さな色付きのリムが描画されます。selectedObj
がクリックされた図形でない場合は、以前選択したオブジェクトの小さな境界線を取得し、新しくクリックされた図形を現在選択されている項目として設定します。- シェイプが選択されたオブジェクトの場合、再度クリックするとシェイプの選択が解除されます。
私は、キャンバスに4つの形状をプッシュ:
objShapes.push(new Shape(50, 50, "red"));
objShapes.push(new Shape(250, 50, "blue"));
objShapes.push(new Shape(50, 250, "yellow"));
objShapes.push(new Shape(250, 250, "green"));
は、今私は、キャンバス上のオブジェクトを選択し、選択解除できることに成功し、私は、選択したオブジェクトの関数を呼び出すことができるようにする必要があります。機能を起動するには、キーボードを使用しています。次のコードは私が使用しているものです:
$(document).keydown(function(event)
{
if(event.keyCode == 46)
{
if(selectedObj == null)
{
alert("nothing to delete");
}
else
{
alert("Deleting " + selectedObj.attr('fill') + " Circle.");
selectedObj.deleteThis();
}
}
});
イベントハンドラの一部だけが動作します。私が削除キーを押しても何も選択されていない場合、警告ウィンドウには何も選択されていないと表示されますが、オブジェクトを選択して削除キーを押すと警告が表示され、その後、deleteThis()
関数の呼び出しに失敗します。私はそれが.attr()
機能を呼び出すが、deleteThis()
機能を呼び出さない理由を理解していない。
この関数を呼び出せない理由は何ですか?
はselectedObj jQueryオブジェクトのですか?そうでなければ、Shapeクラスのattr()はどこに定義されていますか? – rlemon
selectedObjはどこで定義されていますか?スコープの問題のように聞こえます。 – Seabass
@rlemonでは、Raphaelライブラリは 'attr'を定義しています。 –