我为一个简单的拖放测验做了一个函数。一切正常,除了Internet Explorer当然。在Chrome控制台中,我收到此错误:
未捕获的TypeError:无法读取未定义
的属性“选项”
当我把一个可拖动的拖放在一个droppable上。我“想”(参见下面的编辑)我知道发生错误是因为当答案是正确的时我返回“false”,而false则不是revert的合法返回语句。
我希望可拖动的div保持在给定位置并且不再可拖动,因此它不会返回到其起始位置。我尝试不返回任何内容,返回“valid”,返回“invalid”并返回true。但除了不返回任何内容之外的所有内容都将div返回到其起始位置
不返回任何内容会产生与上述相同的错误。我的问题是,如果不在Chrome中收到错误,我必须返回什么内容?或者我需要改变我的功能吗?
这是功能
function dragAndDrop() {
//drag and drop
$('.drag').draggable({ revert: 'invalid'}); //returns this to start position when drag stops and not dropped on droppable element
$('.answer').droppable({
drop: function(event, ui) {
var target = $(this);
var targetId = target.attr('id');
ui.draggable.draggable('option', 'revert', function() {
var dragId = $(this).attr('id');
if(dragId == targetId) {
//right answer
$(this)
.offset({ top: target.offset().top, left: target.offset().left })
.draggable('destroy');
var img = $(this).find('img');
console.log(img);
$('.imageCol2 > div').each(function() {
if($(this).attr('id') == dragId) {
img
.css({ position: 'relative' })
.animate({"left": "-=px"}, "slow");
console.log($(this));
}
});
//score counter
$('span#correct').each(function(index, elem) {
var good = parseInt($(this).text()) + 1;
$(this).text( function(i,txt) {return txt.replace(/\d+/, good); });
});
return false;
}
else {
//wrong answer
//score counter
$('span#incorrect').each(function() {
var fault = parseInt($(this).text()) + 1;
$(this).text( function(i,txt) {return txt.replace(/\d+/, fault); });
});
return true;
}
});
}
});
}
请注意,只有在答案正确时才会出现错误。
编辑:
我认为由于错误的return语句而发生错误。但我已将我的功能改为下面的功能。答案是对的,我仍然会得到同样的错误。
function dragAndDrop() {
//drag and drop
$('.drag').draggable({ revert: 'invalid'}); //returns this to start position when drag stops and not dropped on droppable element
$('.answer').droppable({
drop: function(event, ui) {
var target = $(this),
targetId = target.attr('id'),
drag = $(ui.draggable),
dragId = drag.attr('id');
if(dragId == targetId) {
//right answer
//score counter
$('span#correct').each(function() {
var good = parseInt($(this).text()) + 1;
$(this).text( function(i,txt) {return txt.replace(/\d+/, good); });
});
drag
.offset({ top: target.offset().top, left: target.offset().left })
.draggable('destroy');
var img = drag.find('img');
$('.imageCol2 > div').each(function() {
if($(this).attr('id') == dragId) {
img
.css({ position: 'relative' })
.animate({"left": "-=px"}, "slow");
}
});
}
else {
//wrong answer
//score counter
$('span#incorrect').each(function() {
var fault = parseInt($(this).text()) + 1;
$(this).text( function(i,txt) {return txt.replace(/\d+/, fault); });
});
drag.draggable('option', 'revert', true);
}
}
});
}
我想我必须将我的问题改为“我做错了什么?”。
答案 0 :(得分:2)
我找到了问题的答案。
我将.('destroy')
更改为.('disable')
。这解决了发生错误的问题。