2009-07-10 3 views
1

Ich versuche, warumreplaceWith und jQuery ziehbarer Tropfen?

$('#title').replaceWith('ha'); 

außerhalb des

drop: function(event, ui) {} 

Bereich in jQuerys abwerfbaren Skript arbeiten, zu verstehen, aber es wird nicht in Arbeit. Insbesondere dann, wenn ich

$(".droppable").droppable({ 
drop: function(event, ui) { 
    $('#title').replaceWith('ha'); 
    } 

bekomme ich ein Runtime Error (line 1102) data(...).options is null or not an object. Auch wenn ich eine $('#title').append('ha'); innerhalb des Drop einfügen :, funktioniert es. Allerdings, wenn ich $('#title').replaceWith('ha'); anderswo außerhalb

setzen
$(".droppable").droppable({ /* */ }); 

es funktioniert?

Antwort

3

Ist das Element mit id = ‚title‘ hat auch class = ‚abwerfbaren‘

konnte ich sehen, ob es ein Element zu entfernen versucht, dass das Drop-Ereignis dort auftritt verursachen würde nicht mehr Element kann zu arbeiten mit und Sie könnten einen Fehler "kein Objekt" erhalten. Ich weiß es nicht genau, ohne es selbst auszuprobieren.

Vielleicht, was Sie tun können, ist das Objekt mit einigen Dummy-Klasse (jQuery Daten wäre besser geeignet und entsprechen der SRP, aber das ist außerhalb des Bereichs dieser Antwort), und dann außerhalb der Dropfunktion des Droppable Sie können

so etwas wie ...

$(".droppable").droppable({ 
    drop: function(event, ui) { 
     // mark the element for replacement 
     $('#title').addClass('replaceThisElement'); 
    } 
}); 

// outside of the drop function 
$('#title .removeThisElement').replaceWith('ha'); 
+0

Sie hatten Recht. Das Drop-Ereignis wurde auf etwas ausgelöst, von dem es kein Element mehr zu entfernen gab. Firebug half mir, das Problem zu identifizieren. – Rio

7

ich poste dies als eine Antwort der Ersatz tun, aber wirklich seine mehr von einem Kommentar zu Jon Erickson Antwort (ich habe nicht den Ruf Punkte Kommentar noch). 18 Monate später ist dies immer noch ein Fehler im IE und ich wollte nur etwas über den "wie man etwas außerhalb der Drop-Funktion ausführen", indem ich setTimeout() vorschlagen

Ich bin das Problem lösen, indem Sie eine anonyme Funktion übergeben Entfernt das Element in setTimeout(). Abhängig von Ihren Snap- oder Reversion-Einstellungen möchten Sie möglicherweise auch das Ziehen des Ziehpunkts ausblenden.

$(".droppable").droppable({ 
    drop: function(event, ui) { 
     // do something interesting here... 

     // now get rid of the draggable 
     $(ui.draggable).hide();   
     setTimeout(function(){$(ui.draggable).remove();}, 1); 
    } 
}); 
+0

Danke dafür, mein Problem behoben! Dies war nur ein Problem in IE8. in IE9 hat alles gut funktioniert. –

+0

Danke! Ich hasse es, IE8 zu unterstützen, aber ach, unsere Hauptbenutzerbasis verwendet es. – dbinott