2009-08-03 4 views
0

Entschuldigung für die sehr grundlegende Frage - Crash-Kurs in Javascript kommt! Aber vorher habe ich eine Javascript-Funktion:Bedingte Einstellung einer JavaScript-Funktion nach der Veröffentlichung eines Formulars

function toggle(request) 

Die Funktion einfach einen div als sichtbar schaltet/unsichtbar. Ich kann das Verhalten auslösen ich von dieser Funktion eines Onclick Ereignis mit will wie folgt:

<input type="radio" name="complete" value="true" id="complete_yes" 
onclick="toggle('true');"/> 

Dies funktioniert gut, aber nach einer Form, unter bestimmten Bedingungen veröffentlichen mag ich das Optionsfeld automatisch ausgewählt und die zu JavaScript-Funktion automatisch auf:

toggle('true') 

... so die div Inhalte enthüllt werden. Ich habe den "checked" Teil funktioniert, aber wie bekomme ich die JavaScript-Funktion, um auch auf True gesetzt werden?

<input type="radio" name="complete" value="true" {if $data.complete == true}checked{/if} id="complete_yes" 
onclick="toggle('true');"/> 
+0

Wenn ich das hier zurückdenke, denke ich, dass das einzige 'Div', das hier offenbart wird, ich bin! – cw84

Antwort

2

Beschlossen jQuery statt zu lernen! Die Syntax unten erreicht das gewünschte Ergebnis und ist sehr wartbar!

$(document).ready(function() { 
$('#complete_yes').toggle(function() { 
    $('#repair_complete').removeClass('hidden'); 
}, function() { 
    $('#repair_complete').addClass('hidden'); 
}); 
}); 
1

Was über das Testen, in Ihrer JS toggle Funktion, wenn das div sichtbar gemacht werden muss oder nicht, je nach dem Status Ihrer Eingabe „geprüft“?

Etwas ein bisschen wie diese, ich denke:

function toggle() 
{ 
    if (document.getElementById('YOUR_INPUT_ID').checked) { 
     document.getElementById('YOUR_DIV_ID').style.display = 'block'; 
    } else { 
     document.getElementById('YOUR_DIV_ID').style.display = 'none'; 
    } 
} 

Absolutly nicht getestet, aber ich denke, Sie bekommen die Idee werden :-)
(I, wenn der Eingang nie wissen, in Betracht gezogen als " geprüft“vor oder nach der JS-Funktion auf Onclick heißt ... Also man könnte in der Tat die‚block‘und‚none‘Einstellungen)

und zu invertieren haben, wenn Sie mehrere Ein-/div-Tags haben, können Sie passieren ihre IDs als Parameter für die toggle Funktion ...

Auf diese Weise müssen Sie sich nie um irgendeine Art von "Initialisierung" für diese Funktion kümmern.


Beachten Sie, dass auch wenn die div sichtbar testen konnte, mit etwas wie folgt aus:

function toggle() 
{ 
    if (document.getElementById('YOUR_DIV_ID').style.display == 'none') { 
     document.getElementById('YOUR_DIV_ID').style.display = 'block'; 
    } else { 
     document.getElementById('YOUR_DIV_ID').style.display = 'none'; 
    } 
} 

(auch nicht getestet)

Auf diese Weise Ihre Funktion würde wirklich Toggle die Divs anzeigen, jedes Mal, wenn es aufgerufen wird.

+0

Danke - klingt vielversprechend, wird morgen testen! – cw84

+0

Wenn Sie feststellen, dass die .checked-Eigenschaft nicht geändert werden darf, bis das Klickereignis ausgelöst wird, versuchen Sie, die gesamte if-Anweisung in ein setTimeout zu schreiben (funciton() {if .... else ...}, 100); - So überprüft es ein wenig, nachdem Sie auf die geprüfte Eigenschaft geklickt haben? – gnarf

+0

Ich habe leider nicht sehr viel Erfolg damit - was sollte die ID in Ihrem ersten Beispiel sein "YOUR_INPUT_ID" - ist das "complete_yes"? Sehen Sie sich mein Code-Snippet an. – cw84

0

Warum nicht so etwas wie:

{if $data.complete == true} 
<script type="text/javascript">toggle('true');</script> 
{/if}