Я тестирую библиотеку JavaScript Raphael и буду испытывать небольшую проблему. Я рисую четыре фигуры на холсте. Затем я разрешаю объекту быть выбранным в данный момент объектом, щелкнув. Затем я добавляю обработчик событий, который прослушивает нажатие клавиши удаления. Это прекрасно работает, но я, похоже, не могу назвать функцию. Ниже приведен код, иллюстрирующий мою проблему.Проблема с вызовом функции JavaScript?
Это класс, который представляет каждый из кругов, на холсте:
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
имеет нулевое значение, кликнутая фигура установлена наselectedObj
и рисует небольшой оправой цвет вокруг обода. - Если
selectedObj
не является формой щелчка, он принимает небольшую границу ранее выбранного объекта, а затем устанавливает новую фигуру в качестве выбранного в данный момент элемента. - Если фигура является выбранным объектом, при повторном нажатии ее отменяет ее.
Я задвиньте четыре фигуры на холсте:
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? если нет, где attr() определено для класса Shape? – rlemon
Где вы определяете selectedObj? Похоже, проблема с областью. – Seabass
@ rlemon, библиотека Raphael определяет 'attr'. –