2012-04-09 4 views
0

Ich habe eine Schaltfläche, die nicht in Jquery funktioniert. Eine Schaltfläche wird von PHP an Jquery übergeben, wobei json-Objekt verwendet wird. Ich habe alle anderen Code nur die Schaltfläche entfernt, um zu testen, um zu versuchen, und dies zu lösen. Ich erstelle den gleichen Link und platziere ihn auf meiner Seite in PHP. Wenn der Link angeklickt wird, erscheint eine Warnung und funktioniert.JQuery Link-Taste funktioniert nicht von PHP zurückgegeben, funktioniert aber wenn nicht

Auf der gleichen Seite habe ich eine zusätzliche Schaltfläche, die die gleiche Schaltfläche ist, aber diese Schaltfläche wurde von PHP über JSON zu JQuery und an die div angehängt. Dieser Link/Button funktioniert nicht? warum ist das? beide erscheinen gleich!

Hoffnung jemanden beraten, was hier

Dank geschieht

Button von PHP

zurück
//Jquery basic test button for functionality (works if link button is already on HTML page) 
    $("[href='#test']").click(function() {  
    alert("has been clicked"); 
    }); 

//JQuery extract of my code 

var content; 
$.each(data, function(i, item) { 
content += item; 

}); 
$(content).appendTo('#theframe'); 
},'json'); 

auch

$.each(data, function(i, item) { 
content += item; 

}); 
$('#theframe').html(content); 
},'json'); 




//php returned 
$json[] = '<a href="#test">View Post</a>'; 
echo json_encode($json); 

//php button on page 
<a href="#test">View Post</a> 
versucht haben

Dank

Gelöst mit Hilfe von allen Posts, danke! @ Anthony's Beispiel hinzugefügt den Rahmen $ ('# theframe'). On ('klicken', '[href = "# test"]', Funktion (e) { Warnung ('wurde angeklickt'); }) ;

+0

Danke, wer eine Antwort geschrieben hat, danke für die Erklärungen Ich habe viel gelernt;) Danke. @Anthony Ich habe dein Beispiel toll genutzt danke – Alan

Antwort

1

Die .click() Funktion fügt nur die Ereignishandler Elemente, die beim Ausführen des Codes vorhanden sind, wirken sich daher nicht auf Elemente aus, die später dynamisch hinzugefügt werden. Die einfachste Lösung, um dies zu umgehen, ist das Einrichten der Ereignisdelegierung mit den Funktionen .on() (jQuery 1.7+) oder .delegate() (vor 1.7). Das .on() Beispiel würde wie folgt aussehen:

$('body').on('click', '[href="#test"]', function(e) { 
    alert('has been clicked'); 
}); 
+0

Danke für alle, die eine Antwort gepostet haben, danke für die Erklärungen, die ich viel gelernt habe;) [email protected] Ich habe dein Beispiel genutzt funktioniert super danke – Alan

3

Sie müssen die Funktionen jQuery on() oder delegate() verwenden, um das click-Ereignis zu neuen Seitenelementen hinzuzufügen, die dynamisch hinzugefügt werden (nachdem die Seite geladen wurde).

Wenn Sie mit jQuery 1.7 und höher sollten Sie auf(): http://api.jquery.com/on/

Wenn Sie eine ältere Version von jQuery Verwendung Delegat verwenden: http://api.jquery.com/delegate/

+0

Danke für deine Hilfe Erikk – Alan

1

der Grund, warum es nicht funktioniert, ist, dass Ihr Dokument bereit Funktion nur einmal ausgelöst. Das bedeutet, dass nach dem Laden Ihrer zweiten Schaltfläche über Ajax kein Ereignishandler hinzugefügt wurde.

Versuchen Sie "on" oder "live" mit:

$("body").on("click", a[href="#target"], function(event){ 
alert("has been clicked"); 
}); 

http://api.jquery.com/on/ < - Docs für "on"

http://api.jquery.com/ < - Ihre neue Lieblings-Webseite!

Hoffe, das hilft!

+0

Das '.on()' Syntax ist äquivalent zu dem, was sie bereits haben - sie müssen die Event Delegation Syntax verwenden. Außerdem ist '.live()' veraltet - kein Grund, es zu verwenden, außer Sie verwenden eine Version von jQuery, so alt, dass es kein Ereignis '.delegate()' hat. –

+0

@AnthonyGrist Danke, dass du das gezeigt hast! Es ist jetzt bearbeitet :) – Andbdrew

+0

Danke Andbdrew für Ihre Hilfe – Alan

Verwandte Themen