Funktion allen Button zuweisen.
BurnDown
- javascript
0 soulcatcher0 BurnDown
0 molily
Hallo Leute,
also das untere Script funktioniert echt super.
Ich hab da nur 2 Fragen.
Frage1:
Wie bekomme ich es hin,
das wenn ich einen Button klicke,
alle Button auf inaktiv gesetzt werden
und nicht nur der der geklickt wurd?
Frage 2:
Wenn der Button auf inaktiv gesetzt wird,
wird ja die Ablaufende Zeit,
auf dem Button angezeigt von 1000 - 0.
Wie bekomme ich aber nur die 100 Schritte angezeigt?
Also das es so aussehn würde,
als würde er von 10 nach 0 zählen?
Button:
<input type="submit" id="btnSubmit(1)" value="Download" onClick="window.open('http://www.web.de'); delayedSubmit('btnSubmit(1)',1000); return false; "/>
<input type="submit" id="btnSubmit(2)" value="Download" onClick="window.open('http://www.google.de'); delayedSubmit('btnSubmit(2)',1000); return false; "/>
Script:
<script type="text/javascript">
var id=id&("");
function delayedSubmit(id, secs)
{
var button = document.getElementById(id);
if (secs > 0) {
button.disabled = true;
button.value = "Download (" + secs+ ")";
setTimeout("delayedSubmit('" + id + "', " + (secs - 1) + ")");
} else {
button.disabled = false;
button.value = "Download";
button.form.submit();
}
}
</script>
Schon mal Danke an alle.
Mfg BurnDown
wie wärs damit:
function delayedSubmit(id, secs)
{
var button = document.getElementById(id);
if (secs > 0) {
// statt:
button.disabled = true;
// dieseshier:
document.getElementById('btnSubmit(1)').disabled = true;
document.getElementById('btnSubmit(2)').disabled = true;
button.value = "Download (" + secs+ ")";
setTimeout("delayedSubmit('" + id + "', " + (secs - 1) + ")");
} else {
// statt:
button.disabled = false;
// dieseshier:
document.getElementById('btnSubmit(1)').disabled = false;
document.getElementById('btnSubmit(2)').disabled = false;
button.value = "Download";
button.form.submit();
}
}
Ok habs soweit hinbekommen,
nur eine frage hab ich noch ich komme mit dem setTimeout nicht klarr,
wie schaffe ich es das nicht die milli sec auf dem Button angezeigt werden,
sonder nur die sec?
Ich krich das einfach nichtgepillert.
Ich weiß das es so aussehn müste:
Restsekunden = Sekunden-VergangeneSekunden
aber ich weiß nicht wie ich das bewerkstellige.
Wäre super wenn mir dabei auch noch jemand Helfen kann.
Button:
<input type="submit" id="btnSubmit(1)" value="Download" onClick="window.open('http://www.web.de'); delayedSubmit('btnSubmit(1)',1000); return false; "/>
<input type="submit" id="btnSubmit(2)" value="Download" onClick="window.open('http://www.google.de'); delayedSubmit('btnSubmit(2)',1000); return false; "/>
Script:
<script type="text/javascript">
function delayedSubmit(id, secs)
{
var button = document.getElementById(id);
if (secs > 0) {
document.getElementById('btnSubmit(1)').disabled = true;
document.getElementById('btnSubmit(2)').disabled = true;
document.getElementById('btnSubmit(1)').value = "Bitte Warten (" + secs + ")";
document.getElementById('btnSubmit(2)').value = "Bitte Warten (" + secs + ")";
setTimeout("delayedSubmit('" + id + "', " + (secs - 1) + ")");
} else {
document.getElementById('btnSubmit(1)').disabled = false;
document.getElementById('btnSubmit(2)').disabled = false;
document.getElementById('btnSubmit(1)').value = "Download";
document.getElementById('btnSubmit(2)').value = "Download";
button.form.submit();
}
}
</script>
Mfg BurnDown
Hallo,
Wenn der Button auf inaktiv gesetzt wird,
wird ja die Ablaufende Zeit,
auf dem Button angezeigt von 1000 - 0.
Wie bekomme ich aber nur die 100 Schritte angezeigt?
Also das es so aussehn würde,
als würde er von 10 nach 0 zählen?
setTimeout("delayedSubmit('" + id + "', " + (secs - 1) + ")");
Du rufst hier setTimeout mit nur *einem* Parameter auf. Der zweite Parameter fehlt. Dass das überhaupt funktioniert, ist bemerkenswert. Vermutlich nimmt der Browser irgendeinen Standardwert.
Was du momentan machst, ist delayedSubmit eintausend Mal nacheinander auszuführen mit setTimeout, aber ohne angegebener Wartezeit. Was dabei herauskommt, ist überhaupt nicht absehbar und dass es ungefähr 10 Sekunden zu dauern scheint, ist wohl auch eher willkürlich. Die »Verzögerung« kommt eher dadurch, dass die wiederholte Ausführung des Codes halt eben soviel Rechenzeit verbrät...
Du musst schon einen zweiten Parameter bei setTimeout angeben.
Sinnvollerweise berechnest du die angezeigte Wartezeit nicht über den setTimeout-Wert. Ich würde das so lösen:
<form action="...">
<input type="submit" value="Download" onclick="window.open(...); delayedSubmit(this); return false;" />
</form>
<script type="text/javascript">
[code lang=javascript]function delayedSubmit (buttonElement, seconds) {
// die Funktion nimmt ein Element entgegen, deshalb oben beim Aufruf die Übergabe von this, das ist das input-Element
// Beim ersten Aufruf ist der Parameter seconds nicht gesetzt, also setzen wir ihn auf 10 Sekunden, die Dauer der Wartezeit
if (seconds == undefined) {
seconds = 10;
// Element ausgrauen
buttonElement.disabled = true;
}
if (seconds > 0) {
buttonElement.value = "Bitte Warten (" + seconds + ")";
// Bei jedem Aufruf wird seconds um 1 vermindert
seconds -= 1;
// Verbesserter setTimeout-Aufruf.
// Das ist im Grunde dasselbe wie in deinem Code, nur wird eine anonyme Funktion übergeben anstelle eines zusammengebauten Strings. Darin sind die Variablen buttonElement und seconds verfügbar, sodass delayedSubmit mit diesen als Parameter erneut aufgerufen werden kann. Das ist etwas komfortabler. Und natürlich der zweiter Parameter, 1000 Millisekunden, d.h. eine Sekunde.
window.setTimeout(
function () {
delayedSubmit(buttonElement, seconds);
},
1000
);
} else {
// Wie gehabt
buttonElement.disabled = false;
buttonElement.value = "Download";
buttonElement.form.submit();
}
}
</script>[/code]
Mathias