hos: JQuery keypress/Ajax Event bubbling?

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?

  1. 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

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. 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!