2016-12-12 3 views
0

In framework7, wie Ereignis click auf dynamische Elemente hinzufügen?Klicken Sie auf Ereignis auf dynamische Elemente nicht funktioniert

Wenn ich mein Element hinzufügen zuerst auf meiner Meinung nach funktioniert das Click-Ereignis wie unten fein:

<div class="test">Click Me</div> 

$$('.test').on('click', function() { 
    myApp.alert("Gotcha!"); 
}); 

Aber wenn ich dynamische Elemente, vor allem Elementen dynamisch hinzugefügt virtual-list, kann ich nicht macht die click Veranstaltung Arbeit. Was ist der richtige Weg?

Ich habe sogar versucht, Inline-Funktion, zB: <div class="test" onclick="myFunction();">Click Me</div>, immer noch wird dies nicht funktionieren.

+0

Klingt wie Sie das Click-Ereignis aufrufen, bevor das Element so erstellt wird deshalb das Click-Ereignis doesn‘ Ich werde daran befestigt. – user2085143

Antwort

2

können Sie verwenden:

// Live/delegated event handler 
$$(document).on('click', 'a', function (e) { 
    console.log('link clicked'); 
}); 

Für Ihren Fall:

$$(document).on('click', '.test', function(e){ 
    console.log('Some code...'); 
}); 

ist hier docs. Blättern Sie bis zum Abschnitt events.

+0

danke und ja, ich kann das click-Ereignis auf diese Weise auslösen, aber ich muss einige Werte basierend auf dem Element übergeben, auf das ich geklickt habe. – JunM

+0

@JunM Sie haben dieses Element bereits, indem Sie innerhalb des Callbacks auf diese Funktion zugreifen. –

0

In der Funktion, in der Sie die neuen Elemente dynamisch hinzufügen, müssen Sie ihnen einen Event-Handler zuweisen.

Können sagen, Sie haben eine Funktion, so etwas wie dieses

function addNewLines(){ 
    //add the new lines here 
    // you have to run this again 
    $$('.test').on('click', function() { 
    myApp.alert("Gotcha!"); 
    }); 
} 
1

Verwendung dieser für dinamically hinzugefügt Elemente:

$$(document).on('click', '.test', function() { 
    myApp.alert("Gotcha!"); 
}); 
1

Alle Antworten sind gut zu gehen mit. Aber wenn Sie diese Klasse "test" für andere Elemente der Seite verwenden, werden Sie am Ende ein zusätzliches Klickereignis auslösen (wenn Sie auf ein anderes Element derselben Klasse klicken). Wenn Sie das verhindern möchten, sollten Sie diesem bestimmten Element Listener hinzufügen.

, wenn Sie ein Element der Klasse test zu einem vorhandenen Element von ID testId sind das Hinzufügen, dann verwenden

$('#testId').on('click', '.test', function(this){ 

    } 
Verwandte Themen