Reputation: 5824
I'm trying to add a FileReader onload event for Chrome, it works fine on Firefox but throws a TypeError exception when I try on Chrome.
Here's my code:
function random(min, max)
{
return Math.floor(Math.random() * (max - min + 1) + min);
}
function handleDrop(event) {
var dt = event.dataTransfer,
files = dt.files,
count = files.length;
event.stopPropagation();
event.preventDefault();
for (var i = 0; i < count; i++)
{
var fileReader = new FileReader();
fileReader.addEventListener("loadend", function(e) {
xn = random(0, $('canvas').attr('width'));
yn = random(0, $('canvas').attr('height'));
widthn = random(100, 200);
$("canvas").drawImage({
source: e.target.result,
fromCenter: false,
x: xn,
y: yn,
width: widthn
});
delete e.target.result;
} , false);
fileReader.readAsDataURL(files[i]);
}
}
$(document).ready(function()
{
var dropContainer = document.getElementById("content");
dropContainer.addEventListener("dragenter", function(event){event.stopPropagation();event.preventDefault();}, false);
dropContainer.addEventListener("dragover", function(event){event.stopPropagation();event.preventDefault();}, false);
dropContainer.addEventListener("drop", handleDrop, false);
});
I'm using the Chrome script debugger and the exception is throwing at the following line:
fileReader.addEventListener("loadend", function(e) {
What can I do to fix this in Chrome?
Upvotes: 0
Views: 509
Reputation: 140220
Well obviously, FileReader
doesn't have addEventListener
. (TypeError: Object #<FileReader> has no method 'addEventListener'
)
Use:
var fileReader = new FileReader();
fileReader.onloadend = function (e) {
xn = random(0, $('canvas').attr('width'));
yn = random(0, $('canvas').attr('height'));
widthn = random(100, 200);
$("canvas").drawImage({
source: e.target.result,
fromCenter: false,
x: xn,
y: yn,
width: widthn
});
};
Upvotes: 4
Reputation: 413720
You should probably make sure you're explicitly converting the CSS properties to numbers before sending them to that "random()" function.
// ...
xn = random(0, ~~$('canvas').attr('width'));
yn = random(0, ~~$('canvas').attr('height'));
You could use parseInt()
of course; that's just an example; so alternatively:
// ...
xn = random(0, parseInt($('canvas').attr('width'), 10));
yn = random(0, parseInt($('canvas').attr('height'), 10));
Also of course the variables should be declared with var
:
// ...
var xn = random(0, ~~$('canvas').attr('width'));
var yn = random(0, ~~$('canvas').attr('height'));
Upvotes: 1