Jquery on() Load Event für ein einzelnes Element

Lesezeit: 4 Minuten

Tut mir leid, wenn diese Frage schon gestellt wurde, aber ich habe keine Lösung gefunden.

Ich habe 3 Radios-Elemente 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 Funktion on() verwende.

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

Hier 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, load 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(…) platziert und die Elemente werden alle angezeigt, wenn die Seite gesendet wird.

Vielen Dank

  • @Cherniv ya, und Skript zu oops

    – A. Wolff

    1. Juli 2013 um 8:31 Uhr


  • @geröstet aber input 100% nein

    – Iwan Tschernych

    1. Juli 2013 um 8:31 Uhr

  • stackoverflow.com/questions/8608145/…

    – rahularyansharma

    1. Juli 2013 um 8:31 Uhr

  • Verwenden Sie einfach das Dokument laden?

    – David Fregoli

    1. Juli 2013 um 8:32 Uhr

  • Ich habe auch “$(document).on(‘ready change’, ‘.user’, function(){” ausprobiert. Ich dachte, dass das auf ein Element angewendete Load-Ereignis ausgelöst wird, wenn das Element geladen wird, wie document.

    – FLX

    1. Juli 2013 um 8:34 Uhr

Benutzeravatar von Vogel612
Vogel612

das load Das Ereignis wird in dem Moment aufgerufen, in dem alle untergeordneten Elemente des angehörten Elements geladen sind. In Ihrem Fall könnte dies vor dem Aufruf des ready-Ereignisses erfolgen, wodurch Ihr 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 bereitgestellt 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 tun keine URL zugeordnet ist mit (mindestens einem) untergeordneten Element(en) es wird kein Ladeereignis geben kann man sich anhören.

versuchen Sie stattdessen Folgendes:

$(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 zur besseren Lesbarkeit gemacht 😉

  • @roasted danke, dass du mich da oben repariert hast. Das Lustige ist, dass das Ladeereignis für das Element, auf das er hört, möglicherweise noch aufgerufen wird, bevor es bereit ist, siehe aktualisierte Antwort

    – Vogel612

    1. Juli 2013 um 8:43 Uhr


  • Die Sache ist, dass Sie einen Handler nur dann an ein Element anhängen können, wenn das Element im DOM bereit/verfügbar ist. Ich kann mir einen Fall vorstellen, in dem Sie ein onload-Ereignis direkt nach diesem Element-Tag an ein Bild/Skript anhängen und dieses Element bereits zwischengespeichert ist. In diesem Fall denke ich, dass Sie Recht haben, das Onload-Ereignis sollte ausgelöst werden, bevor das Dokument fertig ist. Wie auch immer, nette Eingabe in der Tat +1

    – A. Wolff

    1. Juli 2013 um 8:49 Uhr


  • Vielen Dank für die Antwort. Wäre es besser, eine Funktion wie diese Lösung auszuführen oder ein benutzerdefiniertes Ereignis zu erstellen, das ich für das Dokument auslöse? Weil ich dieses System mehrmals verwenden werde.

    – FLX

    1. Juli 2013 um 8:53 Uhr

  • @ Vogel612 nach meinem vorherigen Kommentar, sogar zwischengespeichert, wird das onload-Ereignis eines Bildes immer noch ausgelöst, nachdem das Dokument fertig ist: jsfiddle.net/w4zSj

    – A. Wolff

    1. Juli 2013 um 8:55 Uhr


  • @Vogel612 div hat kein Onload-Ereignis zum Anhängen. Das Onload-Ereignis wird also mit Sicherheit nicht ausgelöst.

    – A. Wolff

    1. Juli 2013 um 9:10 Uhr

Wie Vogel612 erklärte, load feuert nicht für die meisten Elemente.

ready ist nur für document.

Sie können verwenden each um Ihren Event-Handler anfänglich auszuführen.

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

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

Benutzeravatar von Hisham Dalal
Hischam Dalal

<script>
jQuery( 'document' ).on("load ready", function() {
    $('.user').on('change', function(){
        if($(this).val() == 'client'){ 
            $('#user_parent').removeAttr('disabled').closest('tr').show(200);
        }else{
            $('#user_parent').attr('disabled', 'disabled').closest('tr').hide(200);
        }
    });
    // just do this:
    $('.user').change();
    });
</script>

1404830cookie-checkJquery on() Load Event für ein einzelnes Element

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy