2012-04-02 10 views
2

ich eine Bindung mache wie unten zu dokumentieren,Wie zuweisen nicht binden Ereignisse

$(document).bind('click',doThis); 

Aber ich habe einen Textbereich #t1 und i dont die bind Ereignis wollen # t1 zugeordnet werden, wie kann ich mach das ?

Antwort

3
$(document).bind('click',function (e) { 

if (e.target.id!='t1') doThis(); 
}); 
+0

@TJ Crowder: Ja, ich weiß - es ist nur eine Frage von "gewohnt". Der $ kann sicher entfernt werden. –

+0

Ups, warte, es wird nicht "das" sein. "Dies" wird "Dokument" ([Beweis] (http://jsbin.com/aqocux/2)). Sie möchten 'e.target.id' (was nur zuverlässig funktioniert, weil' textarea' Elemente keine untergeordneten Elemente haben können), [so] (http://jsbin.com/aqocux/3). Im allgemeinen Fall (zB wenn es ein "div" wäre), müssten Sie etwas wie "if (! $ (E.target) .closes (" # t1 ") [0]) {... } '(zB: gab es ein '# t1'-Element irgendwo im Pfad vom angeklickten Element zum Dokument). –

+0

@ T.J.Crowder: Gushhh ja. das wird nicht helfen. Bearbeitet. –

3

Der Code, den Sie angegeben haben, hängt das Ereignis auf dem Dokument ab, nicht alle darin enthaltenen Elemente. Ereignisse in der DOM-Blase vom Quellenelement über alle Zwischenelemente bis zum Dokument, es sei denn, diese Weitergabe wird gestoppt, was Sie in jQuery mit event.stopPropagation() tun können. Sie können also das Ereignis click in Ihren Textbereich einklinken und event.stopPropagation() (oder return false) verwenden, um zu verhindern, dass das Ereignis auf Dokumentebene ansteigt. Zum Beispiel:

$("#t1").click(false); 

Live example | source

Dort sagt die false jQuery, dass der Event-Handler nur false (es ist eine Verknüpfung) zurückgeben soll. In einem jQuery-Event-Handler stoppt return false; die Propagierung und verhindert auch jegliche Standardaktion, die das Ereignis möglicherweise hatte (in diesem Fall hat es keine, aber wenn es zum Beispiel ein a-Element wäre, würde die Standardaktion dem folgen Verknüpfung).

0

Sie verwenden .not() Selektor

$(document).not('#t1').bind('click',doThis); 

EDIT

$("*").not('#t1').bind('click',doThis); 
+0

Nein, 'nicht' entfernt übereinstimmende Elemente aus dem Satz. Aber die von '$ (document) 'zurückgegebene Menge hat nur ein Element:' document'. Der Aufruf von 'not ('# t1')' hat keinen Effekt. –

+0

Ich verstehe Ihren Punkt, siehe meine bearbeitete Antwort –

0
$('#t1').unbind(); 

Ich hoffe freibleibend die ID vor Manipulation es Ihr Problem

lösen
+0

Nein, das Ereignis ist nicht an den Textbereich gebunden, daher hat das Aufrufen von 'unbind' keinen Effekt. –

+0

$ (document) .bind ('Klick', function() {. $ ('# txt1') klicken (false); alert ("dies ist die Tessu"); }); –

+0

das funktioniert gut whwher Sie $ ('# txt1'). Klicken Sie auf (falsch) außerhalb des Dokuments oder innen. Ich habe es gerade versucht Tj Crowher ist einfach hervorragend in seiner Erklärung unter –

Verwandte Themen