Forum Doku Wiki Blog

Forumsarchiv 2008, März
Funktion allen Button zuweisen.

archivierte Beiträge lesen

  1. (JAVASCRIPT) Funktion allen Button zuweisen. von BurnDown, 06. 03. 2008, 12:46

Funktion allen Button zuweisen.

Der folgende Beitrag wurde am 06. 03. 2008, 12:46 Uhr von BurnDown veröffentlicht.

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

Funktion allen Button zuweisen.

Der folgende Beitrag wurde am 06. 03. 2008, 15:53 Uhr von soulcatcher veröffentlicht.

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();
  }
}

Funktion allen Button zuweisen.

Der folgende Beitrag wurde am 06. 03. 2008, 23:26 Uhr von BurnDown veröffentlicht.

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

Funktion allen Button zuweisen.

Der folgende Beitrag wurde am 10. 03. 2008, 01:24 Uhr von molily veröffentlicht.

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">
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>


Mathias
--
SELFHTML aktuell Weblog

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4