2011-01-14 11 views
2

Ich habe folgende jQuery Variable:

var confirmbox=$('<div></div>') 
     .data({'defaultText': 'This action cannot be reversed. Are you sure you wish to do this?', 
       'defaultButtons': { Yes : function() { $(this).dialog('close');}, 
            No : function() { $(this).dialog('close');} 
       } 
     }); 

Ich möchte confirmbox.html()-confirmbox.data('defaultText') einzustellen.

confirmbox.html(confirmbox.data('defaultText'));//this works 
confirmbox.html($(this).data('defaultText'));//this fails. Why? 

Und die gleiche Fehler Syntax funktioniert jetzt hier:

confirmbox.dialog({ 
      autoOpen: false, 
      modal: true, 
      buttons: $(this).data('defaultButtons'), 
      close: function(){ 
       $(this).html($(this).data('defaultText')); //working here. Why? 
       $(this).dialog('option','buttons',$(this).data('defaultButtons')); 
      } 
     }); 

Ich denke, dass ich nicht verstehe, was $(this) in bestimmten Kontexten bezieht. Wie kann ich es sagen?

Antwort

2

this ist eine Referenz auf das aktuelle Kontextobjekt. In Ihrem Beispiel, das fehlschlägt, bezieht sich this wahrscheinlich auf das window Objekt (oder was auch immer der nächste unmittelbare umschließende Kontext ist, wenn nicht Fenster). Wenn window über eigene defaultText Daten verfügt, übergeben Sie beispielsweise die in .html().

Aber da .html() entworfen ist, um auch eine Funktion als ein Argument innerhalb dieser Funktion zu nehmen, wird sich this auf den confirmbox Kontext beziehen. Versuchen Sie es so:

confirmbox.html(function(){ 
    // this now refers to confirmbox 
    return $(this).data('defaultText'); 
}); 
+1

Sollte dies nicht 'return $ (this) .data ('defaultText') sein;'? –

+0

@Rocket, yup. Fest. –

2

Wie Sie gesagt haben, dreht sich alles um den Kontext.
Wenn die Funktion dialog.close() ausgeführt wird, zeigt das this-Objekt auf die Dialoginstanz, und als Ergebnis verweist $ (this) auf das jQuery-Dialogobjekt. Wenn ich ist

confirmbox.html($(this).data('defaultText'));//this fails. Why? 

in einem globalen Kontext ausgeführt wird, hat dies nicht diese Bedeutung. Es bezieht sich auf das Objekt document.window, nicht auf Ihre Dialoginstanz.

+0

+1 genau. Und die Lösung ist, ähm, einfach den ersten Weg zu gehen. – karim79

+0

+1: erklärte viel besser als ich. –

1

In confirmbox.dialog, this bezieht sich auf die confirmbox Objekt. Deshalb hat $(this) gearbeitet.

In der Zeile confirmbox.html($(this).data('defaultText')); hat this keinen Kontext und wird nur auf window gesetzt.

Ich bin nicht sehr gut darin Dinge zu erklären, aber ich hoffe das hat geholfen.

Verwandte Themen