2016-12-09 1 views
2

Ich versuche, eine Funktion mit einer Änderung in Radio Button-Auswahl zu delegieren.jQuery ON-Funktion mit Werten, die Parametern zugewiesen sind

$(document).ready(function(){ 
    $('body').on('change', 'radioBtnName', function(e){ 
     $(this).after('<p>"No click me!"</p>'); 
    }); 
});​ 

Ich möchte in der Lage sein, einige Werte an die Handler-Funktion übergeben. Wie

{param1:"hell", param2:"world"} 

Und dann für den Zugriff auf diese Werte innerhalb der Funktion (e) von

e.data.param1 

Wie füge ich diese Parameter und geben sie bei der Festlegung der Delegierten-Werte. Ich erstelle die Radioknöpfe im laufenden Betrieb und möchte die Funktion mit einer Änderung der Auswahl verknüpfen.

+1

Womit verbinden sich die Werte? Sind sie per Knopf? –

+3

Verwenden Sie 'Daten-' Attribute. –

+0

http://jsbin.com/zemapeteha/edit?html,js,console,output –

Antwort

1

Wenn ich dich richtig verstanden habe, willst du zusätzliche Parameter mit der .on() Methode übergeben. Ich hoffe das folgende Beispiel hilft dir.

$(document).on('change', '#radioBlock input[type="radio"]', {param1: 'hell', param2: 'world'}, function(e){ 
 
    console.log(e.data.param1); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="radioBlock"> 
 
    <input type="radio" id="one" name="one" value="One"> 
 
    <input type="radio" id="two" name="two" value="Two"> 
 
    <input type="radio" id="three" name="three" value="Three"> 
 
</div>

+0

Worauf kommt es bei delegierten Ereignishandlern * an, die nur auf eine bestimmte ID-Auswahl * zielen? Dies ist keine sehr wartungsfreundliche Lösung. Lieber aus 'Daten'-' treibe es. –

+0

@GoneCoding Ich bin absolut bei dir und würde es selbst so machen, wie du es vorgeschlagen hast. Ich wollte nur zeigen, dass die '.on()' Methode eine Möglichkeit bietet, zusätzliche Parameter zu übergeben (und so lese ich die Frage, könnte natürlich falsch sein). Am Ende entscheidet der OP, mit welcher Lösung er am besten klarkommt. – Flyer53

+0

@ Flyer53 Ich mag die Tatsache, dass ich die Parameterwerte an die Handler-Funktion übergeben kann und für mich erscheint es geeigneter, aber ich möchte hier fragen, wie wir eine Gruppe von Optionsfeldern auswählen (nicht nur eines von ihnen mit der ID) Kann die Namenseigenschaft hier verwendet werden, um den Gruppenwechsel abzudecken? – Novice

4

Dies könnte leicht mit data-*-Attributen erfolgen, wenn sie pro Element sind. So haben Sie die Taste mit:

<input type="radio" data-param1="hell" data-param2="world" /> 

Und bekommen sie mit:

$(this).data("param1"); 
$(this).data("param2"); 

Auch, wenn Sie die $(this).data() rufen, wird es bringen Sie das ganze data Objekt.

+1

Demo hier: http://jsbin.com/puwezihujo/1/edit?html,js,console,output –

+0

können wir ein komplexes Objekt in Data-Param1 statt einer einfachen Zeichenfolge? Ich habe ein komplexes Objekt, das an die Funktion übergeben wird, die die Änderung in der Optionsfeldauswahl behandelt. – Novice

+1

@Novice Sie können ein JSON durch 'data' setzen, aber in der Verarbeitung' JSON.parse() 'verwenden und die Objekte holen. –

1

speichern sie als Daten auf den Radio-Buttons Attribute:

$(document).on('change', 'radioBtnName', function(e){ 
    var $button = $(this); 
    var param1 = $button.data("param1"); 
    var param2 = $button.data("param2"); 
    // do whatever you want with the values :) 
}); 

Hinweis Verwendung document statt body für delegierte Veranstaltungen. Dies vermeidet die Notwendigkeit für einen DOM ready Handler (und vermeidet einen Fehler mit body)

+1

Hey, du bist zurück? Wie geht es dir? –

+1

Ich verschwende nur meine Zeit wie sonst. Ich sehe, wie SO funktioniert nicht überhaupt geändert :) –

+0

'$ button.after'? – Andy

1

können Sie $(this).data() wie folgt verwenden:

$(function() { 
 
    
 
    $("body").on('click', "#radioBlock input[type='radio']", function(e) { 
 
\t 
 
\t alert('Data Value - ' + $(this).data('value')); 
 

 
    }) 
 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="radioBlock"> 
 

 
    <label> <input type='radio' name='radio_input' data-value='1'> Radio 1 </label> 
 
    <label> <input type='radio' name='radio_input' data-value='2'> Radio 2 </label> 
 
    <label> <input type='radio' name='radio_input' data-value='3'> Radio 3 </label> 
 

 
</div>

hoffe, das hilft!

+0

Ja, tut es. Ich habe meine Lösung gemacht, indem ich Ihre und @ Flyer53 Lösung kombiniert habe. – Novice

+0

@Novice - Hahaha, es ist großartig zu hören, dass Sie Ihre Lösung finden, indem Sie uns zumindest beide Upvotes geben können ... Sonst hängt es von Ihnen ab, die akzeptierte Antwort zu wählen –

Verwandte Themen