2017-02-22 3 views
1

Ich versuche, eine Warnmeldung zu erhalten, wenn ein Element in einem Dropdown-Feld ausgewählt ist, das Dropdown-Feld enthält Datenbankelemente. Ich habe ein Tutorial online für den JQuery Teil des Codes gefolgt, wo der Code gut funktionierte und der Alarm auftauchte. Ich frage mich nur, ob jemand helfen kann, warum es nicht mit meinem Code funktioniert? (Der Ajax-Teil hat nichts mit meiner Frage zu tun)
Jquery-Warnung wird nicht angezeigt, wenn Dropdown-Listenelement angeklickt wird

  $(document).on('click', '.theclass', function() { 
       var clicked = $(this).attr("id"); 
       alert(clicked); 
      }); 

      }); 

    </script> 
+0

'datatype: "php",' 'sollte sein datatype: "html",' und Sie sollten die Zeile für die Warnung Kommentar-. Zeigen Sie uns auch den HTML-Code. Ihr Event-Handler sollte auch 'change' sein, nicht' click'. –

+0

@ScottMarcus ive hat den Code bearbeitet, der Alarm im Versuch, zur Arbeit zu kommen, ist der oberste, nicht der Ajax-Alarm! – Jub

+0

Wie gelten die AJAX- und PHP-Tags? Ich sehe nichts dagegen. – j08691

Antwort

2

Ein paar Dinge:

Sie können nicht zu einer externen JavaScript-Source-Bibliothek und betten Sie Ihre eigenen JavaScript in einem einzigen <script> Elemente. Sie müssen zwei <script> Elemente verwenden, wie folgt aus:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"><script> 

<script> 
     $(document).on('click', '.studentclass', function() { 
      var clickeditem = $(this).attr("id"); 
      alert(clickeditem); 
     }); 
</script> 

Auch Ihr Code eine zusätzliche }); am Ende enthält, die eine Syntaxfehler ist.

Als nächstes Da Sie das Element dynamisch erstellen, kann es sein, dass der Code zum Verkabeln des Ereignishandlers ausgeführt wird, bevor das Element zum DOM hinzugefügt wurde. In diesem Fall wird event delegation empfohlen. Selbst wenn der aktuelle Code das Element erstellt, bevor das Skript ausgeführt wird, gilt dies als Best Practice, um zu verhindern, dass dies in Zukunft zu einem Problem wird, falls sich die Codestruktur ändert.

Als Anfang dieses Artikels heißt es:

Ereignis Delegation uns erlaubt, ein einzelnes Ereignis-Listener zu befestigen, an einem übergeordnetes Element, das für alle Nachkommen Anpassen eines Selektor ausgelöst wird, ob diese Nachkommen existieren jetzt oder sind in der Zukunft hinzugefügt.

Code ändern zu:

$(document).on("click", ".studentclass", function() { 
    var clickeditem = $(this).attr("id"); 
    alert(clickeditem); 
}); 

Da wir hier nicht wiedergeben kann, .php, ich den Arbeits Code zeigen werde mit einem statischen Element.

$(document).on('click', '.studentclass', function() { 
 
    var clickeditem = $(this).attr("id"); 
 
    alert(clickeditem); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="dropdown"> 
 
<button onclick="myFunction()" class="dropbtn">Find Student ></button> 
 
    <div id="myDropdown" class="dropdown-content"> 
 
    <input type="text" placeholder="Search.." id="myInput" onkeyup="filterFunction()"> 
 
     <div id="studentdrop"> 
 
     <div id='students1'> 
 
      <a href="#" id="testing1" class="studentclass">student name</a> 
 
     </div> 
 
     <div id='students2'> 
 
      <a href="#" id="testing2" class="studentclass">student name</a> 
 
     </div>  
 
    </div> 
 

 
    </div> 
 
</div>

+1

Wie aus dem Code ersichtlich, scheinen die Elemente zu existieren, wenn die Seite erstellt wird (es ist PHP) – Massimo

+0

Ya mein Code ist der gleiche wie der, aber es funktioniert immer noch nicht, es muss etwas mit der PHP-Seite der Dinge zu tun haben – Jub

+1

@ Jub Der Code in Ihrer Frage hat zwei große Syntaxfehler, wie ich in meiner Antwort beschreibe. –

Verwandte Themen