it-swarm.com.de

JQuery on () -Ladeereignis für ein einzelnes Element

Es tut mir leid, wenn diese Frage bereits gestellt wurde, aber ich habe keine Lösung gefunden.

Ich habe 3 Funkelemente und möchte den Wert überprüfen, wenn sich die Auswahl ändert und wenn die Seite geladen wird.

Ich würde das tun, indem ich nur die on () Funktion benutze.

Mein Problem ist, dass nur das Änderungsereignis ausgelöst wird.

Hier ist mein aktueller Code:

$('.user').on('load change', function(){
  if($(this).val() == 'client'){ 
$('#user_parent').removeAttr('disabled').closest('tr').show(200);
}else{
  $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
}
});"

Ich habe auch versucht, die Ladung durch ready zu ersetzen, aber es ist auch fehlgeschlagen. Was ist das Problem ? Ist das Ladeereignis nicht für ein einzelnes Element verfügbar?

Der Code wird in $ (document) .ready (...) abgelegt und die Elemente werden alle angezeigt, wenn die Seite gesendet wird.

Vielen Dank

17
FLX

das load -Ereignis wird in dem Moment aufgerufen, in dem alle untergeordneten Elemente des überwachten Elements geladen sind. In Ihrem Fall kann dies vor dem Aufrufen des Ready-Ereignisses der Fall sein, wodurch der Handler zum Laden (der nach document.ready angehängt wird) unbrauchbar wird.

als Referenz siehe JQuery api wo Sie folgendes finden:

Das Ladeereignis wird an ein Element gesendet, wenn es und alle Unterelemente vollständig geladen wurden. Dieses Ereignis kann an jedes Element gesendet werden, das mit einer URL verknüpft ist: Bilder, Skripte, Frames, Iframes und das Fensterobjekt.

dies bedeutet auch, dass Sie eine URL benötigen, damit Sie das Ladeereignis abhören können. Da Sie keinen weiteren Code angegeben haben, gehe ich davon aus, dass Sie tatsächlich eine URL haben, die Sie anhören können.

Dies könnte jedoch die wahrscheinlichste Ursache sein. Wenn Sie keine URL zugeordnet haben mit (mindestens einem) untergeordneten Element (en) es wird kein Ladeereignis geben können Sie anhören.

versuchen Sie dies stattdessen:

$(document).ready(function(){
   checkUserVal();
   $('.user').on('change', checkUserVal);
});

var checkUserVal = function(){
  //do the check
  if($('.user').val() == 'client'){ 
     $('#user_parent').removeAttr('disabled').closest('tr').show(200);
  }else{
     $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
  }
};

ich habe den Code zu einer Methode für bessere Lesbarkeit gemacht;)

20
Vogel612

Da Vogel612 erklärt , wird load für die meisten Elemente nicht ausgelöst.

ready ist nur für document.

Sie können each verwenden, um Ihren Event-Handler zunächst auszuführen.

$(document).ready(function(){
  $('.user')
    .each(user_handler)
    .on('change', user_handler);
});

var user_handler = function(){
  // this
};
5
Vezquex