Ok, die Frage allein macht meinen Kopf zum Drehen.Wie kann eine Funktion ein Elternelement des Ankers finden, der ursprünglich die Funktion aufgerufen hat?
Ich habe ein Anker-Tag, das eine Funktion aufruft:
<a href="#" id="addPerson" onClick="addPerson(); return false;">Add a Guest</a>
Gerade als Referenz, ist dies die Funktion, die aufgerufen wird ist:
function addPerson() {
//current keeps track of how many rows we have.
current++;
console.log($(this).parent('form').attr('id'));
var strToAdd = '<div class="row">\
<div class="column grid_2">\
<label for="two-guests-name'+current+'">Guest '+current+':</label>\
</div>\
<div class="column grid_5">\
<input name="two-guests-name'+current+'" type="text" id="two-guests-name'+current+'" value="Name" onfocus="RemoveFormatString(this, \'Name\')" /> \
<input name="two-guests-age'+current+'" type="text" class="guestage digits" id="two-guests-age'+current+'" value="Age" size="4" maxlength="3" onfocus="RemoveFormatString(this, \'Age\')" />\
</div>\
</div>'
$('#numberguests').append(strToAdd)
};
Ich möchte diese Funktion ermöglichen, Arbeiten Sie an mehreren Formularen auf einer einzelnen Seite. Mein Gedanke war also, zurück in den Baum zu dem übergeordneten Formularelement zu reisen, seine ID zu erhalten und diese (irgendwie) zu verwenden, damit die Funktion auf mehreren Formularen auf der Seite arbeiten kann.
Sie können sehen, ich versuchte mit einem schnellen console.log meine Idee zu testen, aber es kam immer wieder "Undefined". Ich habe auch versucht, die console.log im Anker-Tag selbst auszuführen, aber es war auch "Undefined".
Ich getestet .parents() und es funktioniert perfekt im Anker-Tag, aber nicht in der Funktion iteslf.
Irgendwelche Vorschläge?
Warum übergeben Sie '$ (this)' als Argument, wenn Sie den Kontext direkt mit '.call (this)' verbinden können? –
So oder so, und Ihr Weg ist wahrscheinlich eleganter. Aber irgendwann müssen Sie "this" als ein jquery-Objekt mit $() umschließen, um eltern() usw. zu verwenden. Idealerweise würden wir das Ereignis in der js binden und nicht einmal den onclick im html verwenden. – mmurch