ich benutze $(".button").on("click", function(){ });
Klicken Sie auf eine Schaltfläche, die sich in einem Container befindet, aber dann wird ein Ajax-Aufruf ausgeführt und der Inhalt wird mit neuen Inhalten aktualisiert. Wenn ich dann versuche, darauf zu klicken .button
, funktioniert dies nicht. Wenn ich auf die Schaltfläche klicke, wird nichts zurückgegeben.
Ich habe es sogar versucht
$(".button").live("click", function(){ });
oder
$(".button").click(function(){ });
Wie kann ich es zum Laufen bringen?
EDIT: mein HTML:
<div class="container">
<ul>
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>
<input type="button" value="reload" class="button" />
</div>
live
damit umgehen soll. Es ist also seltsam, dass das nicht funktioniert.Antworten:
Sollte so gemacht werden.
$('body').on('click', '.button', function (){ alert('click!'); });
Wenn Sie einen Container haben, der sich während der Ajax-Anforderung nicht ändert, ist dies leistungsfähiger:
$('.container').on('click', '.button', function (){ alert('click!'); });
Binden Sie das Delegatenereignis immer an das nächste statische Element, das die dynamischen Elemente enthält.
quelle
Ok, ich habe mein Problem gelöst, indem ich die .on () -Funktion korrekt verwendet habe, da mir ein Parameter fehlte.
anstatt
$(".button").on("click", function() { } );
ich benutzte
$(".container").on("click", ".button", function() { } );
quelle
Anstatt:
$(".button").on("click", function() { } );
Ich benutzte:
$(".container").on("click", ".button", function() { } );
Ich habe das benutzt und es hat funktioniert.
quelle
Versuchen Sie das zu tun? Beachten Sie, dass ich das
$.on()
auf das übergeordnete Element lege , aber das.button
für die Aktion auswähle .http://api.jquery.com/on/
<div id="stuff"> <button class="button">Click me!</button> <p>Stuff</p> </div> var $stuff = $('#stuff'), ajaxContent = $stuff.html(); $stuff.on('click', '.button', function(){ $.get('/echo/html/', function(){ $stuff.empty(); console.log($stuff.html()); alert($stuff.html()); // Look behind, #stuff is empty. $stuff.html(ajaxContent); console.log($stuff.html()); }); });
http://jsfiddle.net/62uSU/1
Eine weitere Demonstration:
var $stuff = $('#stuff'), ajaxContent = $stuff.html(), $ajaxContent, colors = ['blue','green','red'], color = 0; $stuff.on('click', '.button', function(){ $.get('/echo/html/', function(){ color++; if (color == colors.length) color = 0; console.log($stuff.html()); alert($stuff.html()); $ajaxContent = $(ajaxContent); $stuff.append($ajaxContent).css('color', colors[color]); console.log($stuff.html()); }); });
http://jsfiddle.net/62uSU/2/
quelle