> From: DAZ > > Thanks Michael, the example you gave works great. I'm having > some problems with a droppable though, here is the sample code: > > $("#dropper").droppable({ > accept: "#dragger", > drop: function(ev, ui) {$(this).append("<br>Dropped!");} }); > > The function that is called on the drop is likely to get very > complex, so I'd like it in a separate function. > > However, my solution below doesn't work: > > $("#dropper").droppable({ > accept: "#dragger", > drop: dropped() > }); > > function dropped() { $(this).append("dropped!") }
That isn't the same as your original code. Here's the problem: drop: dropped() That *calls* the dropped function immediately - not when the drag and drop occurs, but when you call the .droppable() method initially. Instad, you want to pass a *reference* to the dropped function, by omitting the (): drop: dropped By just giving the function name with no parens, you obtain a reference to the function instead of calling it immediately. > The dropped function is getting called as if I change it to: > > function dropped() { alert("dropped!") } > > The alert message does show. Ah, but when does the alert show? If the code you listed is your actual code, the alert shows up too soon, doesn't it? > So I think that there must be a > problem with it accessing $(this). That is something you have to watch out for, but it's not the problem in this particular case (pun unintended but unavoidable). When you change an anonymous function to a named function that you call through a reference to the function, 'this' works the same as before. So if your anonymous function worked, then changing it to a reference to a named function will work as intended - as long as you don't call the function prematurely by appending () to the function name. -Mike