È che fai un pelo di confusione con la propagazione degli eventi:

Osserva questo HTML
codice:
<body onclick = "alert('È stata cliccata la pagina');">
   


       Questo è un  link sul quale è legata una funzione sull'evento onclick.
   </p>
</body>
Ora ci sono 4 Element Innestati:
il Body
Un Paragraph
Un Bold
Un Anchor

Sull'Anchor (il link) è impostato un evento onclick, quando viene lanciato, dopo l'esecuzione sull'elemento, viene PROPAGATO, ovvero vengono lanciate le funzioni associate allo stesso evento su ciascun element padre in sequenza, quindi, viene lanciato l'onclick sul Bold (che è vuoto), sul Paragraph (stesso) e poi sul Body che fa l'alert.

Il tuo problema in questo senso è che quando nella funzione _salva riapplichi l'observe sull'elemento, sei ancora nell'evento onclick del bottone, contenuto nell'elemento, quindi quando la funzione si conclude viene lanciato l'evento onclick del element, in quanto contenitore.

Puoi ovviare il problema utilizzando la funzione stop() dell'evento in corso, inoltre ti conviene usare la funzione bindAsEventListener, non bind, in modo da passare alla funzione anche l'evento come argomento.

http://api.prototypejs.org/language/...nstance_method

Un ultimo consiglio, dato che imposti lo scope delle funzioni sempre all'oggetto edita in corso, perché non salvi l'elemento al suo interno? ti basta fare this.element = $(element) come prima riga dell'initialize, in modo che, in qualunque punto delle funzioni facendo this.element ottieni l'elemento su cui è chiamata la classe.

codice:
var edita = Class.create();

edita.prototype = {
	initialize : function (element) {
		this.element = $(element);
		this.element.observe('click', this._edit.bindAsEventListener(this));
	},
			
	_edit : function(event) {
		event.stop();
		this.element.stopObserving('click');
		var form = new Element('form');
		form.name = "edit";
		var input = new Element('input');
		input.type = 'text';
		input.value = this.element.textContent;
		var b = new Element('button');
		b.innerHTML = "salva";
		b.observe('click', this._salva.bind(this));
		this.element.update();
		this.element.insert(form);
		form.insert(input);
		form.insert(b);
	},
			
	_salva : function(event) {
		event.stop();
		var content = this.element.down('input').value;
		this.element.down('form').remove();
		this.element.update();
		this.element.innerHTML = content;
		this.element.observe('click', this._edit.bindAsEventListener(this));
	}
};