2017-06-21 3 views
-1
$('#hideButton').click(function (e) { 
    var key = $(e.relatedTarget).data('applicationkey'); 
    viewModel.previewApplicationKey(key); 
}); 

Ich wollte es laufen lassen, wenn ich auf das Element mit ID = hideButton klicke. Ich wollte relatedTarget.data ('applicationkey') zu einem viewModel namens previewApplication hinzufügen.Wie wird ein jquery-Ereignis ausgeführt, wenn in diesem Fall geklickt wird?

Wie kann ich diesen Code korrigieren?

EDIT: Okay Entschuldigung für die fehlende Erklärung. Hier ist was los ist.

<i id="hideCross" class="fa fa-2x fa-times" data-bind="attr: { 'data-applicationKey': application.applicationKey }" data-applicationkey="abc9rbwys"></i> 

Dieses Symbol mit id = hideCross hat Daten-applicationkey = "abc9rbwys", wie Sie sehen.

$('#hideCross').click(function (e) { 
    var key = $(e.relatedTarget).data('applicationkey'); 
    viewModel.previewApplicationKey(key); 
}); 

So shoud diese "abc9rbwys" zu meinem previewApplicationKey Ansichtsmodell in der Theorie hinzuzufügen. Haben Sie einen Fehler festgestellt? Ich bekomme keine Fehlermeldung, aber es fügt einfach nicht den Schlüssel zum viewModel hinzu.

+3

in welcher Weise Ihr Code fehlschlagen? wird der Code ausgeführt, wenn Sie auf den oben genannten Artikel klicken? –

+2

Was ist der Fehler? Wir haben verstanden, was Sie getan haben und Ihren Code, aber was und wo ist der Fehler? –

+0

Wahrscheinlich, weil ['relatedTarget'] (https://api.jquery.com/event.relatedTarget/) nur für' mouseout'/'mouseover' Ereignisse nützlich ist. Welches Element erwartetest du von einem Klick-Event? – Phil

Antwort

1

Soweit ich verstanden, man muss nur das Attribut des Tags lesen möchten geklickt wurde, sollten Sie in der Lage sein, dies einfach mit $(this) zu tun, da Sie Ereignishandler auf das gleiche Element angebracht, das dieses Attribut hat:

UPDATE: als @ Janar erwähnt, verwenden Sie wahrscheinlich die gleichen IDs für Ihre Elemente, die nicht korrekt ist. Versuchen Sie es mit ein paar other jQuery selectors zu Event-Handler Ihre Elemente anhängen, wie:

var viewModel = []; 
 

 
$('i[data-applicationkey]').click(function (e) { 
 
    var key = $(this).data('applicationkey'); 
 
    viewModel.push(key); 
 
    console.log(viewModel); 
 
});
i { 
 
    cursor: pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<i class="fa fa-2x fa-times" data-bind="attr: { 'data-applicationKey': application.applicationKey }" data-applicationkey="abc9rbwys">Click me to add applicationkey</i> 
 

 
<br/> 
 

 
<i class="fa fa-2x fa-times" data-bind="attr: { 'data-applicationKey': application.applicationKey }" data-applicationkey="asdfasfasfd">Click me to add applicationkey</i> 
 

 
<br/> 
 

 
<i class="fa fa-2x fa-times" data-bind="attr: { 'data-applicationKey': application.applicationKey }" data-applicationkey="1345dfsgsdg">Click me to add applicationkey</i>

+0

Warten Sie entschuldigen. Tatsächlich fügt es das Objekt dem ViewModel immer noch nicht hinzu, wenn ich darauf klicke. Es gibt mehr als einen Artikel. Wenn ich auf den ersten klicke, funktioniert es gut. Aber wenn ich versuche, auf ein anderes Element zu klicken, bleibt der ApplicationKey gleich, – Dukakus17

+0

haben die Elemente die gleiche ID? IDs sollten eindeutig sein – Janar

+0

@ user7677413 verwenden Sie die gleichen IDs wie Janar erwähnt? Können Sie ein Beispiel mit mehr Elementen erstellen, die Ihr Problem veranschaulichen? Siehe Update, vielleicht wird es dir helfen. Übrigens, welchen Rahmen verwendest du? Vielleicht gibt es einen besseren Weg zur Ereignisbehandlung. –

Verwandte Themen