Entwickler-Ecke

Wünsche, Anregungen & Kritik - Button "Eingabefeld verkleinern" von Inline-Edit


FinnO - Mi 26.12.12 02:24
Titel: Button "Eingabefeld verkleinern" von Inline-Edit
Moin,

Der Button "Eingabefeld verkleinern" vom Inline-Edit hat keine Funktion. Außerdem weiß ich nicht, ob es gewollt ist, dass der Button "Eingabefeld vergrößern" das Eingabefeld auf ca. 3-5km höhe ausdehnen soll. Scroll-Job!

LG


Martok - Mi 26.12.12 04:35

Get a:
Scroll-Job!


Ahem.

user profile iconFinnO hat folgendes geschrieben Zum zitierten Posting springen:
Außerdem weiß ich nicht, ob es gewollt ist, dass der Button "Eingabefeld vergrößern" das Eingabefeld auf ca. 3-5km höhe ausdehnen soll.
Genau genommen sind es 205km... äh Zeilen. Und warum das so ist, ist so ein schöner Anfängerfehler dass ich das hier echt mal ausbreiten muss. Immerhin bin ich der, der immer anderen vorwirft, dass sie dynamische Typisierung nicht verstanden haben wenn sie genau das an PHP kritisieren, da muss ich dann wohl mal diesen "Martok" zusammenfalten, der das hier verbrochen hat ;)

Sehen wir uns das mal an.

JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
PostEdit.ChangeInlineEditHeight = function (post_id, value)
{
  var rows = $("#message"+post_id).attr("rows");
  if (rows + value >= 5) {
    $("#message"+post_id).attr("rows", rows + value);
  }
}

Na, wer siehts schon?
Die beide Parameter sind Zahlen; jQuery-Funktion attr() gibt den Wert eines Attributs als String zurück. Beim "Verlängern" ist value=5, beim "Verkürzen" ist value=-5

Der +-Operator entscheidet anhand des ersten (linken) Typs, ob er Addition oder Verkettung macht. Und was ist das hier? Richtig, String. Also Verkettung.
Kommen wir also vom Standard von 20 Zeilen, steht da:

JavaScript-Quelltext
1:
  if ("20" + 5 >= 5) {                    

Und "20" + (5).toString() ist der String "205".

Spannender ist das beim Einkürzen danach:

JavaScript-Quelltext
1:
  if ("205" + (-5) >= 5) {                    

Und "20" + (-5).toString() ist der String "205-5". >= mit Strings wiederum ist der lexikalische Vergleich. Und da ist "205-5" < "5", da "2" < "5". Und deswegen funktioniert das nicht.

Klarer Anwendungsfall für den Failsafe-Cast "Multiplikation", der nämlich im Gegensatz zu parseInt() bei nicht-Strings nicht NaN erzeugt.

JavaScript-Quelltext
1:
  var rows = 1 * $("#message"+post_id).attr("rows");                    


Und so steht das da jetzt im Testforum auch ;)


Christian S. - Mi 26.12.12 14:30

Stammt der Quelltext nicht sogar noch von mir? Aber warum hat der mal funktioniert, der ist mindestens seit 2011 unverändert :gruebel:

Aber mal 'ne andere Frage: Gibt es noch irgendeinen Browser, in dem man die Textfelder nicht von Hause aus in der Größe verändern kann? Sprich: Braucht man die Buttons eigentlich noch?


jaenicke - Mi 26.12.12 15:48

Die Buttons sind auf Tablets z.B. durchaus hilfreich, da man die Ecken da zur Vergrößerung nicht so leicht erwischt. Wie viele sie benutzt haben, sieht man aber daran, dass den Fehler niemand bemerkt hat. :D