1
将图形添加到画布并将点击功能分配给每个项目。在点击编辑窗口显示出来,使用户编辑形状将此功能传递给某个功能会更改所有已点击的元素
function place(id, top, leftpx, width, height, color) {
var dropped;
dropped.attr('s_id', id)
.appendTo('.xy')
.data({
'posleft': leftpx,
'postop': top,
'width': width,
'height': height,
'color': color
})
.css({
top: top + "px",
left: leftpx + "px",
position: "absolute",
width: width,
height: height
});
dropped.resizable({
containment: '.xyz',
handles: 'all',
stop: function(event, ui) {
$(this).data('width', ui.size.width);
$(this).data('height', ui.size.height);
}
});
dropped.click(function(e) {
var id = $(this).attr("shelf_id"); // gives the correct id
edit($(this));
});
当我点击一个项目,它正确地改变颜色,但只要我点击第二个,它也改变颜色之前点击过的项目。对应的功能如下:
function edit(item) {
//edit window shows up
$("#editDataForm").submit(function(e) {
var id_color = $("#colorSelect option:selected").val();
if (item.data('color') != id_color) {
switch (id_color) {
case '1':
item.css("background-color", "yellowgreen");
item.data('color', id_color);
break;
case '2':
item.css("background-color", "indianred");
item.data('color', id_color);
break;
default:
break;
}
}
e.preventDefault();
});
}
有人请给我一个暗示,我的推理错误是哪里。我只是无法破解它
或者:'$( “#editDataForm”)一个( '提交',函数(E){...});' –
@ A.Wolff我不认为这会做到这一点。每次调用'.one()'都会添加一个运行一次的新处理程序并删除它自己。但是如果在提交之前多次调用edit(),它们每个都会运行。 – Barmar
你是对的! –