2010-09-13 7 views
0

Je ne sais pas si c'est possible, mais dans mon application rails, j'ai actuellement pour mettre du texte dans un text_field pour être une description au lieu d'avoir une étiquette externe:Effacer un champ de texte si rien n'est envoyé

 <% inside = "Search for Customers" %> 
     <%= text_field_tag :search, params[:search], 
         :style => "color:#aaa;", 
         :value => inside, #defined above 
         :onfocus => "if(this.getValue()=='#{inside}'){this.clear();this.style.color = '#000';}", 
         :onblur => "if(this.getValue()==''){this.setValue('#{inside}');this.style.color = '#aaa';}" %> 
     <%= submit_tag "Search", :name => nil %> 

Cela fonctionne très bien, mais si je ne saisis rien, il recherche "Rechercher des clients", ce qui n'est pas ce que je voulais. Y'a t'il un moyen d'arranger cela?

Merci

Edit:

J'ai ajouté un :onSubmit => "if(this.getValue()=='#{inside}'){this.clear();}" au text_field_tag, mais il est encore de ne rien faire. J'ai également essayé :onbeforesubmit et même un simple alert('test') mais cela ne fonctionne pas pour une raison quelconque.

Répondre

0

remplissage à l'intérieur par params [: recherche] si définir

<% inside = params[:search] || "Search for Customers" %> 
0

Je ne sais pas si rails le rend différent, mais vous pouvez généralement utiliser:

<form onbeforesubmit="someFunction()">

Et puis dans unefunction() efface le champ de texte.

+0

onbeforesubmit ne fonctionne pas, au moins en chrome ce n'est pas. – Reti

3

Il existe un nouvel attribut d'espace réservé pour les entrées en HTML5, il fait exactement ce que vous demandez, mais ne fonctionnera pas pour tout le monde pour le moment.

http://diveintohtml5.ep.io/detect.html#input-placeholder

Vous pouvez l'utiliser et de secours de remplissage et de compensation sur le terrain avec l'événement onsubmit pour les personnes qui ont des navigateurs plus anciens.

+0

Il y a quelques infos sur la sous-diffusion ici http://www.quirksmode.org/js/forms.html – Jedidiah

+0

Je préfère ne pas utiliser HTML5 comme je suis sûr que 95% de mes utilisateurs n'utiliseront pas les navigateurs modernes (malheureusement). En outre, j'ai essayé la chose onSubmit, mais cela ne fonctionne pas: \ (voir mon edit dans l'OP) – Reti

+0

Avez-vous mis l'onsubmit sur le formulaire ou l'entrée? – Jedidiah

1

Vous pouvez simplement ignorer la demande au niveau du contrôleur si le champ de recherche est vide ou si le paramètre de recherche correspond à votre chaîne inside, quelque chose comme:

def search 
    if params[:search].blank? || params[:search] == "Search for Customers" 
    return 
    else 
    do_whetever_you_want 
    end 
end 
Questions connexes