2014-12-29 10 views
5

Ho un gestore di eventi collegato alle caselle di controllo. Sto usando l'interruttore di avvio http://www.bootstrap-switch.org/meteora recupera il valore vero/falso dal checkbox switchChange

Sto cercando di ottenere il valore di stato che è vero o falso in una variabile, quindi posso impostarlo sul valore della sessione.

È possibile ottenere il valore vero o falso quando lo stato cambia (come si vede nel codice visualizzato). Tuttavia, mi piacerebbe ottenere questo valore all'interno degli eventi. Si prega di controllare la mia variabile x.

Client.js

Template.myTemplate.rendered = function() { 
$('input[name="questions"]').bootstrapSwitch('state', true, true); 
$('input[name="questions"]').on('switchChange.bootstrapSwitch', function(event, state) { 
console.log(state); // true | false 
}); 

html:

<template name="myTemplate"> 
<div class="row"> 
    <input type="checkbox" name="questions" unchecked> Hobby? 
</div> 
<div class="row"> 
    <input type="checkbox" name="questions" unchecked> Writer? 
</div> 

Sto cercando di ottenere il valore che viene stampato in console.log(state) all'interno del codice di reso in una variabile nel mio caso quindi posso impostare la sessione in valore su true o false.

Template.myTemplate.events({ 
'click input': function(event) { 
    var x = $(this).is(":checked").val(); 
    Session.set("statevalue", x); 
    console.log(Session.get("statevalue")); // this is not printing out anything 
} 
}); 

risposta

1

Si dovrebbe usare template esempio:

Template.myTemplate.events({ 
'click input': function(event, template) { 
    var x = template.$('input').is(":checked").val(); 
    Session.set("statevalue", x); 
    console.log(Session.get("statevalue")); 
} 
}); 

o forse con 'target':

Template.myTemplate.events({ 
'click input': function(event) { 
    var x = $(event.target).is(":checked").val(); 
    Session.set("statevalue", x); 
    console.log(Session.get("statevalue")); 
} 
}); 
+0

Non so se c'è qualche differenza, ma io uso event.currentTarget – Sindis

+0

sto ottenendo un errore con la sintassi .VAL(). Ho provato valore; ma anche questo non è corretto. I documenti di jQuery mostrano che la seconda risposta che hai dato dovrebbe funzionare in teoria. Quindi forse qualcosa ha a che fare con il bootstrap-switch. – meteorBuzz

+0

Sto leggendo il loro codice js cercando di vedere come funziona http://www.bootstrap-switch.org/dist/js/bootstrap-switch.js – meteorBuzz

1
Template.myTemplate.rendered = function() { 
$('input[name="questions"]').bootstrapSwitch('state', true, true); 
$('input[name="questions"]').on('switchChange.bootstrapSwitch', function(event, state) { 
var x = $(event.target).is(":checked"); 
Session.set("statevalue", x); 
    console.log(Session.get("statevalue")); 
}); 
} 
+0

'var x = $ (event.target) .is (": checked ");' Qui non è necessario il confronto. event.target.checked contiene già una dichiarazione vera/falsa. Hai appena confrontato vero con vero/falso. Semplice restituirlo invece di restituire il risultato di confronto. –

3

Se si definiscono id per le caselle di controllo, è possibile utilizzare

event.target.checkboxID.checked 

con in evento modello.

restituirà true o false se selezionato o meno.

14

credo di avere avuto molto meglio sollution e non direttamente utilizzando jQuery:

Template.myTemplate.events({ 
'change input': function(event) { 
    var x = event.target.checked; 
    Session.set("statevalue", x); 
    console.log(Session.get("statevalue")); 
} 
}); 

Fare attenzione per vedere che io suggerisco di utilizzare il cambiamento invece di clic nella manifestazione.

+0

Gente, questa è una buona risposta - ha funzionato come un fascino – brianjlennon

+1

Questa dovrebbe essere la risposta migliore. Con Meteor, si desidera utilizzare i valori predefiniti ed evitare jQuery quando possibile. Inoltre è più leggibile. – Turbo

0
'click .task_checkbox'(event){ 

    const target = event.target; 
    var isChecked = $("#"+event.target.id).is(":checked").val(); 
    console.log(isChecked); 

}, 
0

L'oggetto event ha già tutte le informazioni necessarie.

Template.myTemplate.events({ 
    'click input': function(event) { 
    if (event.target.name === 'questions') { 
     Session.set("statevalue", event.target.checked); 
     console.log(Session.get("statevalue")); 
    } 
    } 
});