• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit value-Attribut bei einem Suchprogramm

P

PeterUstinox

Guest
Moin, Moin!
Ich habe ein kleines Programm in Python geschrieben, das (m)ein Telefonbuch ersetzen soll!

Das Problem, das mir nun entgegnet ist, ist folgendes:

Ich habe den input-Elementen mit dem value-Attributen einen Anfangswert gesetzt, der onclick verschwindet

z.B.
HTML:
<input type="text" name="such_nachname" value="Gib hier den Nachnamen ein!" onclick="this.value=''" size="45" />

und wenn ich jetzt das Formular absende, haben die ganzen input-Elemente Werte, die selbstverständlich kein Ergebnis in meiner Suche ergeben!
Nun frage ich mich, wie ich es (leicht) schaffe diese Werte zu "entwerten", damit anständige Ergebnisse mich erreichen

Hier mal das ganze Python Skript:
Code:
#!C:/Python26/python.exe
tab="\t"
f=file("C:/Res/flensburg2.tab")
tabelle=f.readlines()
f.close()


print 'content-type:text/plain'
print

import cgi, cgitb
cgitb.enable()

form = cgi.FieldStorage()

such_vorname=form.getvalue("such_vorname", "")
such_nachname=form.getvalue("such_nachname", "")
such_strasse=form.getvalue("such_strasse", "")
such_ort=form.getvalue("such_ort", "")
such_tel=form.getvalue("such_tel", "")
such_hnr=form.getvalue("such_hnr", "")
z=0
neutabelle=[]
for ds in tabelle:
    nummer,name,strasse,ort,tel=ds.split(tab)
    neuzeile=name+tab+strasse+tab+ort+tab+tel+"\n"
    namen=name.split(" ",1)
    if len(namen) < 2:
        nachname = "".join(namen)
        vorname = ""
    else:
        nachname,vorname = namen

    strasse=strasse.strip()
    s=strasse.split(" ",)
    hnr=s[-1]
    strasse=s[0:-1]
    strasse = " ".join(strasse)
    hnr= "".join(hnr)

    if such_nachname in nachname and  such_vorname in vorname and such_strasse in strasse and such_hnr in hnr and such_ort in ort and such_tel in tel:
        print ds
        z+=1

    else:
        p = "Ihre Suchanfrage brachte Leider keine Ergebnisse."
if z>1:
    print "Es wurden ",z," Ergebnisse gefunden."
elif z==1:
    print "Es wurde nur ein Ergebnis gefunden."
else:
    print p

Das Formular könnt ihr online beschauen unter: Die Flensburger Suchmaschine
Durch das klicken auf den Submit-Button bekommt ihr das Skript.
 
Werbung:
Ich verstehe das Problem nicht ganz. Das Formular wird also ohne Werte abgeschickt?
Dann ist es aber doch richtig, dass Du keine Treffer bekommst.

Oder willst Du nur verhindern, dass jemand ein Feld leer lässt? Dann frage das entsprechend in Deinem Script ab und gib einen Fehler aus.

"Anständige Ergebnisse" kannst Du nunmal nur bekommen, wenn der Nutzer auch anständige Suchbegriffe eingibt.

Oder hast Du Deine Frage anders gemeint?
 
Etwas genauer:

Die Value-attribute
HTML:
value="Gib hier den Nachnamen ein!"
verschwinden ja onclick.
HTML:
onclick="this.value=''"

Das Problem dabei ist, dass sie nicht verschwinden, wenn ich nicht draufklicke.
Das bedeutet mein Programm sucht nach dem Nachnamen :
"Gib hier den Nachnamen ein!"

wenn z.B. nur nach einem Vornamen allein gesucht wurde.

Diesen Nachnamen gibts es selbstverständlich nicht und ich bekomme keine Ergebnisse aus meiner Suche!

Das heißt ich muss diese nicht vom User bearbeiteten Inputs für mein Programm irgendwie entwerten, damit ich anständige Suchergebnisse erziele!

Und wie das funktioniert, weiß ich leider nicht. Mir kommen nur ein paar if-Konstruktionen in den Kopf, die das Problem vielleicht lösen könnten. Ich habe nur gehofft, dass es eine elegantere Lösung dafür gibt.
 
Werbung:
Das ist sowieso das nervigste was man machen kann. Wenn man sich mal vertippt hat, kann die Eingabe nicht mehr korrigiert werden, sondern muss immer neu getippt werden.

Besser so:
<input value="Gib hier den Nachnamen ein!"
onfocus="if(this.value== this.defaultValue)this.value=''"
onblur="if(!this.value) this.value=this.defaultValue"
>
 
onclick ist das falsche Attribut bei einem input-Feld. Verwende onfocus.
Das muss ich doch mal relativieren, weil ich da gestern erst ein Safari-Problem gelöst habe.

Bei Safari zieht onFocus nur, wenn man per Tastaturnavigation in das Feld gelangt. Wenn man in das Feld reinklickt, wird onFocus bei Safari NICHT getriggert. Das hieße für diesen Fall, dass der Text trotzdem stehen bleibt.

Das bedeutet mein Programm sucht nach dem Nachnamen :
"Gib hier den Nachnamen ein!"
Du brauchst beim Auswerten des Scripts ja nur auf eben diesen Wert zu prüfen und den so behandeln, als wäre nichts eingegeben.
 
Werbung:
Bei Safari zieht onFocus nur, wenn man per Tastaturnavigation in das Feld gelangt. Wenn man in das Feld reinklickt, wird onFocus bei Safari NICHT getriggert. Das hieße für diesen Fall, dass der Text trotzdem stehen bleibt.
Bei mir nicht. Mein Safari reagiert genau wie alle anderen Browser.
 
Safari - Setting Cookies Via JavaScript
"Of course, onfocus is *not* the same as onmouseover, and in safari at least that means onfocus is only triggered when a user gives the link focus through alt-tabbing to the link (in other words, keyboard focus, not mouse focus). I'd personally recommend using onclick. "

Kann sein, dass es nur im Zusammenhang mit onBlur zum Tragen kommt, bei meinem Konstrukt mit einem onFocus, das die Größe eines Selects vergrößert, und bei onBlur dieses wieder verkleinert, hat genauso reagiert, wie in dem verlinkten Beitrag (s. auch Zitat) geschrieben. Das hat nur bei Tastaturnavigation geklappt. Es scheint also auf jeden Fall Situationen und Safari-Versionen (bei mir 4.0.4, Vista) zu geben, die genau so reagieren und deswegen sollte man es nicht allein bei onFocus belassen.
 
In dem Thread geht es um einen Link, auch mein safari feuert bei einem Link kein Fokus, egal ob mit Maus oder Tastatur(*). Aber bei Formularfeldern funktionieren diese Events einwandfrei, so wie sie es auch in anderen Browsern funktionieren.

EDIT: *Der Safari läßt sich gar nicht mit der Tatstatur bedienen
 
Werbung:
Das, was Du da erzählst, denkt sich in keiner Weise mit meinen Beobachtungen.
Aber bitte, Du musst ja keinen Tipp annehmen. War ja nur gut gemeint.
Und Safari lässt sich bei mir durchaus mit Tastatur navigieren, so wie es aussieht, allerdings nur von Eingabefeld zu Eingabefeld und Adress- und Suchzeile. Aber für diesen Fall reicht das durchaus.
Aber um einen Link geht es nicht, sondern um ein Eingabefeld.

Aber ist ja auch egal...
 
Ich rede von Links, du kannst keine Links mit der Tastatur ansteuern.

Und ja, es geht um ein Eingabefeld und da funktioniert mein obiges Beispiel tadellos. Genau wie in einem select Feld, du kannst es gerne ausprobieren:
<select
onfocus="alert(this)"
>
<option>ooo 1</option>
<option>ooo 1</option>
<option>ooo 1</option>
</select>

EDIT: Ich weiß im Moment gar nicht mehr was du überhaupt willst. Du hast weiter oben behauptet das:
Bei Safari zieht onFocus nur, wenn man per Tastaturnavigation in das Feld gelangt. Wenn man in das Feld reinklickt, wird onFocus bei Safari NICHT getriggert. Das hieße für diesen Fall, dass der Text trotzdem stehen bleibt.
und das ist falsch.
 
Ja, aber dann redest Du doch am Thema vorbei:
Ich habe den input-Elementen mit dem value-Attributen einen Anfangswert gesetzt, der onclick verschwindet

Meine Aussage ist richtig, ich habe mich schließlich lange mit dem Problem herumgeschlagen, bis ich auf die von mir verlinkte Lösung gekommen bin. Und ich dachte, ich weise darauf hin, dass Safari da offensichtlich Probleme hat - das ist das, was ich will.

Hier ist ein Beispiel: http://www.efchen-systems.de/tmp/onfocus.html
Der Focus feuert nicht, wenn Du mit der Maus in das select klickst. Nur, wenn Du per TAB-Taste reinkommst.
Safari 4.0.4 Windows Vista.
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Deine Aussage bezog sich ja auf die von threadi:
onclick ist das falsche Attribut bei einem input-Feld. Verwende onfocus.
und das ist absolut korrekt.
Während das:
Bei Safari zieht onFocus nur, wenn man per Tastaturnavigation in das Feld gelangt. Wenn man in das Feld reinklickt, wird onFocus bei Safari NICHT getriggert.
zumindest für mich nicht nachvollziehbar ist. Bei mir wird ein onfocus im Safairi gefeuert.
 
Wie gesagt, schau mal ins Beispiel rein, da geht es nicht.

Das Feld sollte beim reinklicken größer werden, beim Rausgehen wieder kleiner.
Das geht nicht und man kann rein gar nichts selektieren.
 
Werbung:
Das Beispiel geht, nur der safari kann den Wert nicht ändern, bzw. hat die Änderungen keine Wirkung.

EDIT:

<select name="cc" multiple="multiple" size="5"
onfocus=" this.style.backgroundColor='#ff0'"
onblur=" this.style.backgroundColor=''"
>
<option>Geht</option>
<option>Geht nicht</option>
<option>Geht</option>
<option>Geht nicht</option>
<option>Geht</option>
<option>Geht nicht</option>
<option>Geht</option>
<option>Geht nicht</option>
</select></form>
 
Wie, das Beispiel geht? Du meinst, es geht nicht, so wie ich es beschrieben habe, oder?

Oder kannst Du in dem select was auswählen? Wenn ja, welchen Safari benutzt Du? Welches BS?
 
Nein, es geht insofern, dass der Event gefeuert wird. Aber der Safari hat eine Problem bei this.size, das geht nicht und führt anscheinend auch zu dem anderen Problem.
 
Werbung:
Nein, das this.size funktioniert einwandfrei. Wenn ich zu dem Code ein onClick hinzufüge mit der selben Anweisung wie im onFocus, dann gehts.
Auch wenn Du das onBlur rausnimmst, funktioniert das onFocus sogar.

Du kannst mir gerne erklären, woran das liegt, in meinem Problemfall hab ich ein onClick hinzugefügt. Dann gehts überall.
Bin gespannt. :-)
 
Keine Ahnung woran es liegt, mein Beispiel mit der Hintergrundfarbe funktioniert einwandfrei, d.h. für mich es liegt an size. Auch wenn du ein alert() einbaust, wird diese gefeuert.

Mein Vermutung ist, dass der Safari bei einer Änderung der Größe einen onblur feuert, was in dem Fall zu einer endlosschleife führt, was auch die Unbenutzbarkeit erklären würde.

Es hat aber nichts mit onfocus an sich zu tun, der wird vom Safari hier gefeuert.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben