JQuery keypress/Ajax Event bubbling?
hos
- javascript
hallöchen,
mein script und ich verstehen uns nicht mehr:
script macht per klick auf element folgendes:
-- funktion erstelleOrdner() aufrufen
-- funktion erstelleOrdner() ruft Dialogfunktion zur Eingabe eines Namen auf
...erwartet per callback den eingegebenen Namen als Rückgabewert
...führt dann einen AJAX-Request zum Erstellen des Ordners mit dem callback-Namen als Parameter durch
<span style="color:white;" onclick="erstelleOrdner();"> ++ </span> <!--zum Testen-->
function erstelleOrdner(){
eingabeDialog(elem, 'neuerOrdner', function(x) {
var ordnername=x;
var path=PATH; //PATH=globale Variable
$.ajax({
type:"GET",
url:"ajax/",
dataType:"JSON",
beforeSend:function (xhr){
//angepasste Header
},
data:{ path: path, fn: ordnername},
success: function(data, textStatus, jqXHR){ //build menuObject
alert('ajaxcall'); //wird mit jedem weiteren erstellten Ordner einmal mehr aufgerufen
}
});
return false;
});
}
function eingabeDialog(elem, usecase, inputnameparam){
alert('aufruf editdialog!');
//andere Parameter..(elem ist das formular)
switch(usecase){
case 'neuerOrdner':
//hier wird ein eingabeformular eingeblendet und der Ordnername kann in nameinputeingegeben werden
elem.keypress(function (e){
if(e.which==13){
e.preventDefault();
e.stopPropagation();
renameform.hide();
$('#windoweditcoverage').css('display', 'none');
elem.css('display', 'none');
alert('hier'); //wird mit jedem weiteren erstellten Ordner einmal mehr aufgerufen
inputnameparam(nameinput.val()); //gibt eingabewert an callbackfunction zurück
clearformparams(elem);
}
//return false; ???
});
break;
}
}
DAS PROBLEM:
Erstellt man den 1. Ordner, werden alle Schritte korrekt durchlaufen. Erstellt man den 2. Ordner, wird zwar
auch der richtige Ordner im richtigen Pfad erstellt, aber der Request geht 2 mal raus. Beim 3. Ordner 3 Mal usw. :-)
Es werden beide alerts entsprechend häufig ausgegeben. Also es wird x mal die keypressfunction aufgerufen und x mal der neue Eingabewert an die callbackfunktion
zurückgegeben.
Wooo wird denn noch welches Event nicht gestoppt oder ein Rückgabewert erwartet oderoder?
Hi,
function eingabeDialog(elem, usecase, inputnameparam){
alert('aufruf editdialog!');
//andere Parameter..(elem ist das formular)
switch(usecase){
case 'neuerOrdner':
//hier wird ein eingabeformular eingeblendet und der Ordnername kann in nameinputeingegeben werden
Gehe ich Recht in der Annahme, dass es sich dabei um immer wieder das selbe Eingabefeld handelt?
Sofern Ja:
> > Wooo wird denn noch welches Event nicht gestoppt oder ein Rückgabewert erwartet oderoder?
> ~~~javascript
elem.keypress(function (e){
> if(e.which==13){
Hier knallst du bei jedem Aufruf einen neuen Handler für den Keypress-Event drauf.
Den Handler irgendwann mal wieder entfernen sehe ich dich im gesamten Script nicht.
MfG ChrisB
Gehe ich Recht in der Annahme, dass es sich dabei um immer wieder das selbe Eingabefeld handelt?
JAA (es wird nur "geleert")
Sofern Ja:
Wooo wird denn noch welches Event nicht gestoppt oder ein Rückgabewert erwartet oderoder?
elem.keypress(function (e){
if(e.which==13){
>
> Hier knallst du bei jedem Aufruf einen neuen Handler für den Keypress-Event drauf.
JAA
> Den Handler irgendwann mal wieder entfernen sehe ich dich im gesamten Script nicht.
JAWOLL, das war die Lösung des Problems :-) Ich kann Dir gar nicht sagen wie laut ich Danke gerufen hab. Ich hab das einfach nicht gesehen, also schon das die gedoppelten alerts alle in der keypress function kamen, aber nicht warum. jetzt habe ich folgendes eingefügt:
$(this).unbind('keypress'); //am ende von(e.which==13)
> MfG ChrisB
Viele Grüße und Vielen Dank!