romero: readonly bei values

hallöchen an euch,

das thema hatte ich bereits schonmal geschrieben, aber irgendwie ging es unter, da ich im urlaub war und auf die fragen oder anregungen nicht reagieren konnte.

deshalb nochmal die frage an euch, wie ich in einem <input type=text">-feld das value, welches ich setze, auf nur lesen setzen kann. es sollte aber so "gesetzt" werden, dass das value an sich unverändert bleibt, ich aber hinter dem value weitere zeichen einfügen kann.

weil das neue value, welches sich daraus ergibt, lese ich aus und wird in meinem script weiter verwendet.

der hintergrund ist der, dass ich eine excel-tabelle auslese und dabei kann es vorkommen, dass 2 oder mehrere tabellenblätter sich ähneln (z.b. blatt 1: vw_golf IV, blatt 2: vw_golf V, ... ). in meiner auswahl aber treffe ich nur eine auswahl wie vw golf. und dabei findet er halt diese 2 (oder mehrere ) blätter. mittels einer schleife, versuche ich nun dem nutzer meiner *.hta-datei darum zu bitten in dem value, welches dann so aussieht: value="vw_golf", den genauen typ zu nennen und zu bestätigen. sprich: vw_golf_v.

und bisher könnte er auch das value komplett ändern in z.b. opel_corsa_c (um mal ein anderen typ zu nennen). und das wollte ich unterbinden. aber nicht mittels einer function, der nach dem betätigen des "ok"-buttons, aktiviert wird, sondern dachte da halt an dieses readonly, welches nur auf das akuelle value zutrifft (oder vllt. eine völlig anderes attribut).

wäre euch da sehr dankbar.

lg romero

  1. Hi!

    das thema hatte ich bereits schonmal geschrieben, aber irgendwie ging es unter, da ich im urlaub war und auf die fragen oder anregungen nicht reagieren konnte.

    Gab es Abworten? Wenn ja, warum verlinkst du den Thread nicht und kommentierst, was dir daran weitergeholfen hat und was nicht?

    mittels einer schleife, versuche ich nun dem nutzer meiner *.hta-datei darum zu bitten in dem value, welches dann so aussieht: value="vw_golf", den genauen typ zu nennen und zu bestätigen. sprich: vw_golf_v.

    Ein Select-Element geht in dem Fall nicht?

    Es gibt jedenfalls kein Halb-readonly-Feld. Du kannst dir da nur etwas aus zwei Elementen zusammenbauen, wenn es keine Auswahl aus vorgegebenen Werten sein soll.

    Lo!

    1. Gab es Abworten? Wenn ja, warum verlinkst du den Thread nicht und kommentierst, was dir daran weitergeholfen hat und was nicht?

      weiß nich wie das geht,sorry :(

      Ein Select-Element geht in dem Fall nicht?

      geht schon. das wäre denkbar. dachte aber das es eine möglichkeit gibt, den nicht zu veränderbaren value mit einer eingabe zuerweitern.

      @der martin

      das mit den 2 input-feldern war mein weiterer gedanke. sieht halt nur nicht "schön" aus. ist zwar zweckmäßig aber dachte da an ein teil-readonly.

      aber die variante mit dem select-feldern ist vllt. doch die saubere lösung.
      das problem ist nur, dass ich halt das in eine for-schleife packen müsste, denn weiß ja nicht, wie viele tabellen-blätter sich ähneln.

      oder geht es über die function add() bei dem html-elementobjekt select?

      lg romero

      1. Hi!

        Gab es Antworten? Wenn ja, warum verlinkst du den Thread nicht und kommentierst, was dir daran weitergeholfen hat und was nicht?
        weiß nich wie das geht,sorry :(

        Was jetzt, das Thread-Finden oder das Kommentieren der Antworten? :-) Das Verlinken ist ja in der Hilfe beschrieben. Aber selbst wenn du die URL nur genannt hättest, wäre das für die Antwortenden hilfreich, was letzlich dir zu Gute kommt.

        Ein Select-Element geht in dem Fall nicht?
        geht schon. das wäre denkbar. dachte aber das es eine möglichkeit gibt, den nicht zu veränderbaren value mit einer eingabe zuerweitern.

        Mit Javascript lässt sich einiges anstellen. Du könntest auf Tasten reagieren und das Bearbeiten des feststehenden Teils unterbinden oder wieder rückgängig machen. Aber einfacher sind zwei getrennte Elemente.

        das mit den 2 input-feldern war mein weiterer gedanke. sieht halt nur nicht "schön" aus. ist zwar zweckmäßig aber dachte da an ein teil-readonly.

        Auf die Schnelle probiert hab ich mal ein span und ein input nacheinander geschrieben und dem einen einen Rand außer rechts und em anderen einen Rand außer links zugewiesen. Hat im Firefox nicht geklappt, weil die Schnittstellen nicht übereinstimmten.

        das problem ist nur, dass ich halt das in eine for-schleife packen müsste, denn weiß ja nicht, wie viele tabellen-blätter sich ähneln.
        oder geht es über die function add() bei dem html-elementobjekt select?

        Du musst in jedem Fall alle ähnlichen Blätter ermitteln. Ob du daraus gleich ein Select mit Optionen erzeugst oder erst ein Javascript-Array oder ähnliche Struktur erstellst, ist aus Server-Script-Sicht kein großer Unterschied. Mit dem Select sparst du dir aber zusätzlichen Javascript-Code.

        Lo!

        1. Was jetzt, das Thread-Finden oder das Kommentieren der Antworten? :-) Das Verlinken ist ja in der Hilfe beschrieben. Aber selbst wenn du die URL nur genannt hättest, wäre das für die Antwortenden hilfreich, was letzlich dir zu Gute kommt.

          ja war da zu vorschnell unterwegs. gelobe aber besserung :)

          Mit Javascript lässt sich einiges anstellen. Du könntest auf Tasten reagieren und das Bearbeiten des feststehenden Teils unterbinden oder wieder rückgängig machen. Aber einfacher sind zwei getrennte Elemente.

          sieht aber unschöner aus als wenn ein input type="text" im gesamten wäre oder?

          Auf die Schnelle probiert hab ich mal ein span und ein input nacheinander geschrieben und dem einen einen Rand außer rechts und em anderen einen Rand außer links zugewiesen. Hat im Firefox nicht geklappt, weil die Schnittstellen nicht übereinstimmten.

          wie sieht das denn aus? da ne *.hta-datei n internet explorer dingens ist, scheint es da ja kein problem zu geben oder?
          kannst du mal dein code zeigen? nur zum angucken.

          Du musst in jedem Fall alle ähnlichen Blätter ermitteln. Ob du daraus gleich ein Select mit Optionen erzeugst oder erst ein Javascript-Array oder ähnliche Struktur erstellst, ist aus Server-Script-Sicht kein großer Unterschied. Mit dem Select sparst du dir aber zusätzlichen Javascript-Code.

          naja nicht direkt. habe es erstmal so geschrieben, dass wenn er mehr als 2 ähnliche ermittelt, das dann immer die auswahl in dem input als value erscheint, sprich vw_golf. und ich dann halt die "erweiterung" dazu hängen wollte.

          das script sucht zwar alle ähnlichen tab-blätter raus, speichert sie auch in ein array ab, der nutzer kann auch eine "erweiterung" wählen, die da nicht vorkommt. was spätestens beim "auslesen" der exceltabelle bzw. -blatt zu einer fehlermeldung kommt.

          ich werde beide möglichkeiten mal testen und schauen, welche möglichkeit ich als bessere erachte.aber trotzdem für euer bemühen und das geben von tipps und tricks.

          lg romero

          1. Hi!

            Auf die Schnelle probiert hab ich mal ein span und ein input nacheinander geschrieben und dem einen einen Rand außer rechts und em anderen einen Rand außer links zugewiesen. Hat im Firefox nicht geklappt, weil die Schnittstellen nicht übereinstimmten.

            Im IE9 ist nur eine Versatzstelle oben zu sehen, beim Firefox war oben und unten ein Versatz.

            wie sieht das denn aus? da ne *.hta-datei n internet explorer dingens ist, scheint es da ja kein problem zu geben oder?
            kannst du mal dein code zeigen? nur zum angucken.

            Das ist ziemlich einfach. Das Span bekommt border-left, das Input border-right und beide border-top und -bottom jeweils mit solid 1px silver. Das Input erhält zusätzlich noch border-left: none; Ansonsten stehen die beiden nur ohne Whitespace hintereinander.

            Lo!

            1. Hi!

              Auf die Schnelle probiert hab ich mal ein span und ein input nacheinander geschrieben und dem einen einen Rand außer rechts und em anderen einen Rand außer links zugewiesen. Hat im Firefox nicht geklappt, weil die Schnittstellen nicht übereinstimmten.

              Im IE9 ist nur eine Versatzstelle oben zu sehen, beim Firefox war oben und unten ein Versatz.

              wie sieht das denn aus? da ne *.hta-datei n internet explorer dingens ist, scheint es da ja kein problem zu geben oder?
              kannst du mal dein code zeigen? nur zum angucken.

              Das ist ziemlich einfach. Das Span bekommt border-left, das Input border-right und beide border-top und -bottom jeweils mit solid 1px silver. Das Input erhält zusätzlich noch border-left: none; Ansonsten stehen die beiden nur ohne Whitespace hintereinander.

              Lo!

              also sieht man trotzdem zwischen den einzelnen inputs so ne art trennlinie oder?und das wars was ich eigentlich vermeiden wollte.

              aber das mit dem selcet finde ich nun besser.was mir da noch nicht klar ist, ist das mit den remove?bei selfhtml finde ich da nix genaueres über dieses select remove.kann mir da jemand sagen wie ich eine vorher über add() erstelle select-auswahl wieder remove'en kann?

              weil er hängt immer an die vorhergehende auswahlliste auch die neue dran.wollte aber da die vorhergehende löschen.

              kann mir da jemand ne referenz geben zu select remove?

              vielen dank an euch.

              lg romero

              1. Hallo,

                Das ist ziemlich einfach. Das Span bekommt border-left, das Input border-right und beide border-top und -bottom jeweils mit solid 1px silver. Das Input erhält zusätzlich noch border-left: none; Ansonsten stehen die beiden nur ohne Whitespace hintereinander.
                also sieht man trotzdem zwischen den einzelnen inputs so ne art trennlinie oder?

                nö, nicht unbedingt. Wenn man das span-Element nun noch als display:inline-block formatiert, kann man auch seine Höhe dem nachfolgenden input-Element angleichen. Und lückenlos nebeneinander stehen sie doch sowieso schon.

                Ciao,
                 Martin

                --
                Husten kann böse Folgen haben.
                Besonders im Kleiderschrank.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
              2. Hi!

                also sieht man trotzdem zwischen den einzelnen inputs so ne art trennlinie oder?

                Nein, schau es dir an, vielleicht ist es in deinem System nicht oder anders zu sehen, aber die oberen Ränder der beiden Elemente sind in meinem IE9 um ein oder zwei Pixel versetzt, beim Fx auch die unteren.

                aber das mit dem selcet finde ich nun besser.was mir da noch nicht klar ist, ist das mit den remove?bei selfhtml finde ich da nix genaueres über dieses select remove.kann mir da jemand sagen wie ich eine vorher über add() erstelle select-auswahl wieder remove'en kann?

                Steht da nicht was von auf null setzen oder length dekrementieren, wenn es das unterste Element ist?

                weil er hängt immer an die vorhergehende auswahlliste auch die neue dran.wollte aber da die vorhergehende löschen.

                Element überschreiben ginge vielleicht auch.

                Lo!

                1. Steht da nicht was von auf null setzen oder length dekrementieren, wenn es das unterste Element ist?

                  naja steht da irgendwie aber nicht direkt mit dem remove(). aber wollte die gesetzen komplett löschen.

                  folgendes habe ich gescriptet, wo ich auch neue options anhand meines array's erstellen kann.

                  document.getElementById( "STL_Meldungen_Alt_Text" ).innerHTML = '<p class="STL_Meldungen_Überschreiben">Folgende Bereiche wurden gefunden: <font color="darkred" id="Tabellenblätter">' + tab[0] + '</font>. Bitte Alternativnamen eingeben: <select name="Tabellenauswahl" id="Überschreiben_Alt_Text" size="1" class="STL_Meldungen_Button"></select> <input type="button" id="Alt_Text" value="OK" class="STL_Meldungen_Button"></input>';

                  das ist die zeile, wo ich die options erstellen lasse.

                  						for( var i = 0; i < tab[0].length; i++ )  
                  						{  
                  							Auswahlliste = document.getElementsByName( "Tabellenauswahl" )[0];  
                  							Eintrag = document.createElement("option");  
                    
                  							Eintrag.text = tab[0][i].substr( tab[0][i].indexOf( "_" )+1, (tab[0][i].length-tab[0][i].indexOf( "_" )-1) );  
                  							Eintrag.value = tab[0][i].substr( tab[0][i].indexOf( "_" )+1, (tab[0][i].length-tab[0][i].indexOf( "_" )-1) );  
                  							var Folgendeoption = Auswahlliste.length;  
                    
                  							Auswahlliste.add( Eintrag, Folgendeoption );  
                  						};
                  

                  die variable tab ist ein großes array, welches kleinere array's besitzt (siehe tab[0][0], tab[0][1],... ).

                  wenn ich also nun die anderen kleineren array's (tab[1], tab[2], ...) nach dem 1. array (tab[0]) nun erstellen will, soll es nicht, wie bisher an die vorrangegangen option angehangen werden, sondern es sollten alle bisherigen options gelöscht werden und dann erneut options angehangen werden. also ne art if()-abfrage. und da weiß ich nicht weiter. wie es halt mit remove() funktioniert.

                  @chris

                  hab es mir durchgelesen.und das nicht nur 1mal. habe selbst ein <form></form> in mein "innerHTML" geschrieben um dieses select genau so anzusprechen wie es dort steht, aber dann kommt immer "unbekannter laufzeitfehler", wo ich wieder nicht weiß, woher es kommt. deshalb dachte ich es geht mit remove() besser bzw einfacher.

                  deshalb frag ich euch, wie kann ich es bewerkstelligen, dass ich die vorherigen einträge lösche (mittels if() z.b.) bzw das es nicht drangehangen wird?

                  lg romero

                  1. hab die lösung:

                    								if( document.getElementsByName( "Tabellenauswahl" )[0].length > 0 )  
                    								{  
                    									for( var j = document.getElementsByName( "Tabellenauswahl" )[0].length-1; j >= 0; j-- )  
                    									{  
                    										document.getElementsByName( "Tabellenauswahl" )[0].remove( j );  
                    									};  
                    								};
                    

                    warum schwierig suchen und nachdenken, wenn es eigentlich soooo einfach ist. nun ja.

                    erst einmal ermitteln wie lang die anzahl der options sind und sie dann von hinten heraus jedes einzelne löschen. total simpel im nachhinein, aber trotzdem danke für eure tipps und hinweise.

                    lg romero

              3. Hi,

                Auf die Schnelle probiert hab ich mal ein span und ein input nacheinander geschrieben und dem einen einen Rand außer rechts und [...]

                also sieht man trotzdem zwischen den einzelnen inputs so ne art trennlinie oder?und das wars was ich eigentlich vermeiden wollte.

                Man könnte auch einfach den Text hinter dem transparenten Inputfeld platzieren - und mit einem entsprechenden padding dafür sorgen, dass man erst „rechts davon“ zu tippen beginnen kann.

                aber das mit dem selcet finde ich nun besser.was mir da noch nicht klar ist, ist das mit den remove?bei selfhtml finde ich da nix genaueres über dieses select remove.kann mir da jemand sagen wie ich eine vorher über add() erstelle select-auswahl wieder remove'en kann?

                Lesen lernen …?
                http://de.selfhtml.org/javascript/objekte/options.htm - direkt oben in der Übersicht befindet sich ein Anker „Elemente aus Auswahlliste löschen“!

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Hallo,

    das thema hatte ich bereits schonmal geschrieben, ...

    ja, ich erinnere mich.

    deshalb nochmal die frage an euch, wie ich in einem <input type=text">-feld das value, welches ich setze, auf nur lesen setzen kann. es sollte aber so "gesetzt" werden, dass das value an sich unverändert bleibt, ich aber hinter dem value weitere zeichen einfügen kann.

    Oder etwas klarer formuliert: Du hast eine Eingabe, die aus einem festen, unveränderlichen und einem wirklich veränderlichen Teil besteht.
    Das einfachste, was mir dazu einfällt: Mach zwei getrennte Felder. Das erste mit dem unveränderlichen Teil (Vorgabetext) kann ein readonly-input sein, aber auch ganz normaler statischer Text. Und nur der zweite, veränderliche Teil kommt in ein normales input-Feld.

    weil das neue value, welches sich daraus ergibt, lese ich aus und wird in meinem script weiter verwendet.

    Dann müsstest du halt zwei Strings zusammenfügen, anstatt nur einen Wert zu lesen. Auch kein großer Mehraufwand.

    So long,
     Martin

    --
    Wie kann es sein, dass ich von 100 Gramm Schokolade zwei Kilo zunehme?
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(