2016-05-20 6 views
1

Ich habe zur Zeit einen div, in denen zu einem bestimmten Zeitpunkt eine Taste dynamisch geladen: Zunächst sieht es so wie:Aktion vor Onclick Aktion von dynamisch belasteter Taste

<div id="id"></div> 

während an einem gewissen Punkt wird es

<div id="id"> 
    <button type="button" onclick="function1();"></button> 
</div> 

Jetzt will ich eine Aktion Onclick auszuführen, bevorfunction1 genannt wird. Um eine Aktion OnClick auf eine dynamisch geladene Taste zu binden, würde ich normalerweise etwas entlang der Linien von

jedoch
$("#id").on('click', 'button', function() { 
    function2(); 
}); 

tun, ich vermute, dass da die Schaltfläche dynamisch diese Click-Handler durch die auf die definierte Onclick außer Kraft gesetzt wird geladen Taste, und nur function1 wird aufgerufen. Wie kann ich sicherstellen, dass auf dieser dynamisch geladenen Schaltfläche auch function2 onclick ausgeführt wird? Bitte gehen Sie davon aus, dass ich das onclick-Attribut, das dynamisch geladen wird, nicht ändern kann.

+0

können Sie erklären, wie Schaltfläche Hinzufügen dynamisch – Asher

+0

Ich bin mit einem Kassensystem arbeiten die funktioniert in mehreren Schritten, wobei der "Weiter" -Button in einem Schritt den nächsten Schritt (einschließlich des nächsten "Weiter" -Buttons) lädt. Meine Funktionalität muss auf einer der "Fortfahren" -Schaltflächen funktionieren, die beim Laden der Seite noch nicht vorhanden sind. Ich möchte diesen Prozess nicht direkt bearbeiten, sondern bin in der Lage, meine zusätzlichen Funktionen einzubinden, indem ich eine einzige js-Datei ohne Bearbeitung des erforderlichen Kerns einfüge. – Radical

Antwort

4

Jetzt möchte ich eine Aktion onclick durchführen, bevor function1 aufgerufen wird.

Anstatt klicken, verwenden Sie das mousedown Ereignis, da es vor click Ereignisse aufgerufen wird (wie Click-Ereignis nach mouseup aufgerufen wird)

$("#id").on('mousedown', 'button', function() { 
    function2(); 
}); 

oder auch versuchen, (basierend auf Diskussion in den Kommentaren unten)

+0

Wenn ich als Benutzer den Mauszeiger auf den Button drücke, dann meine Maus von ihm wegbewege und loslasse, wird dann nicht nur der Mausklick ausgeführt, sondern der Klick? Idealerweise möchte ich eigentlich nur, dass function2 ausgeführt wird, wenn der Klick tatsächlich ausgeführt wird. – Radical

+0

Eine Lösung, die meinen Anwendungsfall löst, ist die Verwendung des Ereignisses "mouseup" anstelle des Ereignisses "mousedown", da dies zu dem Zeitpunkt geschieht, zu dem der Klick abgeschlossen ist und nicht bevor der Benutzer die Maus loslässt. Dies ist nicht genau gleich einem Klick, da ein Benutzer einen "Mausklick" außerhalb des Buttons und "Mouse Up" darin hat, aber in meinem Anwendungsfall funktioniert es. – Radical

+0

@Radical Interessant, da mouseup auf einem Element immer noch als "Klick" vom System betrachtet wird, unabhängig davon, wo der Benutzer 'mousedown' gemacht hat. – gurvinder372

0

Im Anschluss an gurvinder372's answer, löste ich das Problem durch Einhängen in das MouseUp-Ereignis (anstelle von Mousedown wie er vorgeschlagen)

$("#id").on('mouseup', 'button', function() { 
    function2(); 
}); 
0

Ich glaube, Sie, so etwas tun:

$("#id").on('click', 'button', function() { 
return func2(); 
}); 

function func2() 
{ 
alert("function2 is alert") 
} 

dies die function1 außer Kraft setzen