Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.javascript > #4851

Re: Doppelte Eingabe

Path csiph.com!feeder.erje.net!1.eu.feeder.erje.net!weretis.net!feeder4.news.weretis.net!feeder5.news.weretis.net!news.solani.org!.POSTED!not-for-mail
From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.javascript
Subject Re: Doppelte Eingabe
Supersedes <2682631.CbtlEUcBR6@PointedEars.de>
Date Thu, 02 Feb 2017 21:02:13 +0100
Organization PointedEars Software (PES)
Lines 100
Message-ID <3978478.cEBGB3zze1@PointedEars.de> (permalink)
References <o6uvk2$qva$1@news.albasani.net> <1t58931f77i3f82n3e8%sfroehli@Froehlich.Priv.at> <o6vg9b$e26$1@news.albasani.net> <1t58935c1bi1e45n3e8%sfroehli@Froehlich.Priv.at> <aa7ec64e-3970-59ca-f8e9-647206e26680@arcor.de>
Reply-To Thomas 'PointedEars' Lahn <cljs@PointedEars.de>
Mime-Version 1.0
Content-Type text/plain; charset="UTF-8"
Content-Transfer-Encoding 8Bit
X-Trace solani.org 1486065733 2355 eJwFwQkRwEAIBDBLx7MLyGEo+JfQBEbhhBN0HO66phj5cMmGCmbL8QFym7bWU618nToZ5j8X5hC4 (2 Feb 2017 20:02:13 GMT)
X-Complaints-To abuse@news.solani.org
NNTP-Posting-Date Thu, 2 Feb 2017 20:02:13 +0000 (UTC)
User-Agent KNode/4.14.2
Cancel-Key sha1:ZToA5ujTUfknfWs2zVbRM17nKt8=
X-User-ID eJwNyskBACAIA7CVRMvhOIJl/xH0l0d0mVg5TA3a2u1CNtD7ckTUrjMlMxqTkro8ve4O5cfhzZXqA/8YawjkAXp1FiM=
X-NNTP-Posting-Host eJwNy8EBADEEBMCWOHbRToj+S8jNf2BUdjhBx2K9GQxB7XVV4J6ZzAOIlGkzJWX/8JlPXK0HBckQIw==
Face iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAGFBMVEXTxa4RFk5dUWANED8PFEfy7+MGBiW+n3ZNF/QuAAACaElEQVQ4jVXUwVOcMBQG8Dc7Rc4PUntdWV2uxjDpGaGeozOp1woar4jd5t/v9wLstMwsA/ntlxdCAgUc1hjTc9/JCZfGoo3wG3HdmdAWrIJRHe7GM/TmpY5VFefuVcAkkPbLIaN8rmPmjloyZxgyR3GuJ4K0AGtJ2htz8o7yqikm759fldQXaMpbDzjKAG+8v+AugVTOPO5DOjLvGtUYQwh0CPjnVMyGd+8/GfUB5nLKJDD2aLDh5HYyMDJGDwQIo2ZmZcKbowNmAdB/AzyFhrmF2MHRb0QJJfaAnwGB6orZhoykLzJtGwF/xpYxI1dswomiUj3gTuAIqCn/4C7cULwGNBtwMTk3Y4LfKB5YUaOKBKYtpplm7u0vip8tU1NWWyI/7XdcSuIDoMt6rVHMWT0DbjHPGqDqZVSa6zleLcUTcIKLoMv3ueJluALtAo9B302zPPlrtiVScRdCjXvVh3e3JpYa/jjkuC9N+LrBMlz/eAN4eQijX2EdLo6c5tGGHwLyHFtXk89dDGHwCVhG9T0S/j55AhRZgkMCmUQXJ49TnS1wnQDvw0eAh9ICeMmEFbCnPMFzjAvsWoEWEFdYEx+S0MoUZ1gT1wId8+AF3Bl2OoEu906AUHx5VLw/gXYg/x84loOah/2UYNrgiwSwGO7RfUzVBbx/kgpckumGOi6QirtD6gkLTitbnxNol47S2jVc2vsN5kPqaAHT8uUdAJM4v/DanjYOwmUjWznGfwB7sGtAtor5BgofDuzaRj4kSQAqDakTsKORa3Q3xKi3gE1fhl71KRMqrdZ2AWNNg/YOhQyrVBnb+i+nEg4bsDA+egAAAABJRU5ErkJggg==
X-Face %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&.<b';Md8`dH6iqhT)6C^.Px|[=M@7=Ik[_w<%n1Up"LPQNu2m8|L!/3iby{-]A+#YE}Kl{Cw$\U!kD%K}\2jz"QQP6Uqr],./"?;=4v
Cancel-Lock sha1:htgXLarjKax3SYbwZV98nI7bqBE=
Xref csiph.com de.comp.lang.javascript:4851

Show key headers only | View raw


Christoph M. Becker wrote:

> On 02.02.2017 at 17:24, Stefan Froehlich wrote:
>> Im wesentlichen läuft es darauf hinaus:
>> 
>> | <script language="JavaScript">
> 
> Das language Attribut sollte eigentlich schon lange nicht mehr verwendet
> werden. Aber dazu kann ein anderer sicher mehr sagen. :)

Für gültiges HTML 4.01 (1999) fe lt das type-Attribut, und für gültiges HTML 
4.01 Strict und HTML5+ (2014) gehört das language-Attribut weg.  In HTML5 
ist ausserdem type="text/javascript" optional; ich schreibe es aus 
Kompatibilitätsgründen trotzdem hin:

<http://wayback.archive.org/web/20100904140711/http://pointedears.de/scripts/test/mime-types/>

[Keine Ahnung mehr, was “partially supported” (gelb) bedeutet; diesen 
Testcase aktualisiert wieder online zu stellen, steht schon länger auf 
meiner TODO-Liste.  Soifz. [psf 10.1]]
 
>> | var isSubmitted;
>> | 
>> | function singleFormSubmission() {
>> | if (isSubmitted) return false;
>> | isSubmitted = true;
>> | return true;
>> | }
>> | </script>
>> | 
>> | <form [...] onsubmit="return singleFormSubmission();">
> 
> Die Funktion ist nicht mal nötig. Es geht auch:
> 
>   <form […] onsubmit="return !!isSubmitted++">
> 
> Schön ist keine der beiden Varianten, aber sie funktionieren[TM].

Nein, Deine Variante funktioniert nicht i.S.v. „tut was sie soll“, denn sie 
ist nicht äquivalent :)

Funktionieren würde

  <form […] onsubmit="return !isSubmitted++">

aber nur, wenn der initiale Wert von “isSubmitted” 0 oder ein entsprechend 
dazu konvertierbarer Wert wäre.

Denn hier isSubmitted === undefined, und

  1. Mit Post-Inkrement wird *erst* der Wert der Variablen/Eigenschaft
     ausgewertet, dann wird er zu Number konvertiert und dann um 1 erhöht.

  2. Mit Anfangswert “undefined”:

     !!isSubmitted++ === !!undefined === !(!undefined) === !(!false) === 
!true === false

     Number.isNaN(isSubmitted = (undefined + 1)); /* (!) */

Das Formular kann also so nie abgesendet werden, denn auch Number.isNaN(x++) 
und Number.isNaN(++x), wenn Number.isNaN(x).

Wäre der Anfangswert isSubmitted === 0 (was Du wohl dachtest), dann machte 
Dir das *Post*-Inkrement einen Strich durch die Rechnung, denn

  !!isSubmitted++ === !!0 === !(!0) === !(!false) === !true === false

  (isSubmitted = (isSubmitted + 1)) === (0 + 1) === 1

Das Formular würde also beim ersten Mal _nicht_ abgesendet werden, dann aber 
immer, denn auch !!++Infinity === true¹.

Das kann man im gewünschten Sinn (Formular nur einmal, d.h. nur beim ersten 
Mal, absenden) lösen, indem man nur *einmal* negiert:

  !isSubmitted++ === !0 === !false === true

  (isSubmitted = (isSubmitted + 1)) === 1;

und beim zweiten, dritten usw. Mal

  (!isSubmitted++ === !x === !true === false)  mit  typof x == "number", 
x >= 1.

Herauszufinden, ob es Initialisierungswerte für “isSubmitted” gibt, mit 
denen doppelte Negation und/oder Prä-Inkrement funktionieren würde, bleibt 
dem geneigten Leser zur Übung überlassen.

_______
¹  Normalerweise nur sinngemäss; hier zufällig äquivalent, da “Infinity” 
   eine Eigenschaft des globalen Objekts mit dem Wert 
   Number.POSITIVE_INFINITY ist.  Das funktioniert aber nicht im Strict
   Mode (TypeError), da die “Infinity”-Eigenschaft “read only” ist
   ([[Writable]]-Attribut ist “false”).
-- 
PointedEars
FAQ: <http://PointedEars.de/faq> | <http://PointedEars.de/es-matrix>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

Back to de.comp.lang.javascript | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Re: Doppelte Eingabe "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-02-02 18:05 +0100
  Re: Doppelte Eingabe Stefan+Usenet@Froehlich.Priv.at (Stefan Froehlich) - 2017-02-02 17:07 +0000
  Re: Doppelte Eingabe Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2017-02-02 21:02 +0100
    Re: Doppelte Eingabe "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-02-03 00:52 +0100
  Re: Doppelte Eingabe Ralph Stahl <post@rstahl.de> - 2017-02-03 10:27 +0100
    Re: Doppelte Eingabe "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-02-03 11:38 +0100

csiph-web