Ich habe eine Anwendung, die Projektnamen aus einer Datenbank abruft, wenn das DOM bereit ist. Jedes Projekt wird zu einem <select><option>
in einem html <form>
hinzugefügt. Sobald die Liste ausgefüllt ist, kann der Benutzer einen Projekttitel auswählen, der die restlichen Informationen aus der für das Projekt spezifischen Datenbank anfordert.jQuery .change() Ereignis wird nur einmal ausgelöst
Um dies zu erreichen, verwende ich die $.change()
jQuery-Methode. Leider wird das Ereignis nur einmal ausgelöst, wenn das Element <select>
erstellt und dem DOM hinzugefügt wird. Wenn Sie ein anderes Projekt aus der Liste auswählen, wird das Ereignis nicht ausgelöst und löst daher keinen $.post()
-Aufruf aus.
$(function(){
getProjects();
var firstLoad = true;
$("select").change(retrieveProject); // Removed parenthesis based on answers
// On page load, get project names from the database and add them to a Select form element
function getProjects() {
var selectionList;
$.getJSON("php/getProjects.php", function (data) {
selectionList = "<form><select>";
for (var i = 0; i < data.length; i++) {
selectionList += "<option name='prjTitle'>" + data[i].ProjectTitle + "</option>";
}
selectionList += "</select></form>";
}).complete(function() {
$('#project-selection-menu').append(selectionList).removeClass('hidden');
firstLoad = false;
});
}
function retrieveProject() {
if (firstLoad == true){
alert(firstLoad); // This alert fires
return false;
} else {
alert(firstLoad); // This alert doesn't fire
$.post("php/getProjects.php", function (data) { // This should have been "php/retrieveProject.php"!
// Do stuff with the returned data
}).complete(function() {
console.log("Success.");
});
}
}
)};
verließ ich aus der anonyme Funktion und "getProjects();" Aufruf, um die Menge an Code zu reduzieren, aber es verursacht offensichtlich mehr Verwirrung. – Roy