2012-04-11 19 views
1

Ich versuche, eine Auswahlbox zu machen, um von einem Suchformular zum anderen zu wechseln, aber ich bin sehr unerfahren mit HTML-Formularen.Wie wähle ich ein Suchformular aus?

Die beiden Optionen sollten "Blog" und "Shop". (FYI das Blog eines für Wordpress und das Geschäft, ein für Opencart.)

Für Wordpress die Suche url wäre: /? S = TEST Für Opencart:/shop/route = Produkt/Suche & filter_name = TEST

Dies sind die beiden Formen so weit:

<form method="get" id="blogsform" class="form-search" action="/"> 
<input type="search" name="s" id="s" placeholder="Blog durchsuchen ..."> 
<input type="submit" class="submit" id="searchsubmit" value="Durchsuchen"> 
</form> 

<form method="get" id="shopsform" class="form-search" action="/shop/"> 
<input type="hidden" name="route" value="product/search"> 
<input type="search" name="filter_name" placeholder="Shop durchsuchen ..."> 
<input type="submit" class="submit" id="searchsubmit" value="Durchsuchen"> 
</form> 

Vielen Dank im Voraus für Ihre Hilfe, Markus

+0

Wie definieren Sie "Wechsel von einem Suchformular zum anderen"? Einer ist versteckt und der andere basierend auf Ihrer Auswahlbox angezeigt. – mellamokb

+0

Entschuldigung, darüber habe ich nicht wirklich nachgedacht. Es sollte eigentlich die gleiche Form sein, aber mit anderen Aktionen/Werten. Einfach so: Suche [Blog/Shop]: [Suchfeld] [Suchfeld] – reitermarkus

+0

Haben Sie die Möglichkeit, eine JavaScript-Bibliothek wie jQuery in Ihrem Projekt zu verwenden? – mellamokb

Antwort

2

Mit jQuery, das sind einfach in dervorgenommenen Änderungenbei einer Auswahlbox:

<select id="chooseform"> 
    <option value="">Select Form...</option> 
    <option value="Blog">Blog</option> 
    <option value="Shops">Shops</option> 
</select> 

Wenn Sie zwei Formen haben wollen, und zeigen/verstecken jedes Formular auf der Auswahl basiert, könntest man so etwas tun:

$('#chooseform').change(function() { 
    var choice = $(this).val(); 
    if (choice == "Blog") 
    { 
     $('#blogsform').show(); 
     $('#shopsform').hide(); 
    } 
    else if (choice == "Shops") 
    { 
     $('#blogsform').hide(); 
     $('#shopsform').show(); 
    } 
    else 
    { 
     $('#blogsform').hide(); 
     $('#shopsform').hide(); 
    } 
});​ 

Demo: http://jsfiddle.net/Pf9QQ/


Wenn Sie eine einzelne Form haben wollen, aber ändern Sie die Aktion/Methode und Anzeigeeigenschaften dynamisch die Form auf der Auswahl basiert, könnte man es so etwas tun:

$('#chooseform').change(function() { 
    var choice = $(this).val(); 
    if (choice == "Blog") 
    { 
     $('#theform').attr('action', '/'); 
     $('#s').attr('name', 's'); 
     $('#s').attr('placeholder', 'Blog durchsuchen ...'); 
     $('#theform').show(); 
    } 
    else if (choice == "Shops") 
    { 
     $('#theform').attr('action', '/shop/'); 
     $('#s').attr('name', 'filter_name'); 
     $('#s').attr('placeholder', 'Shop durchsuchen ...'); 
     $('#theform').show(); 
    } 
    else 
    { 
     $('#theform').hide(); 
    } 
});​ 

Demo: http://jsfiddle.net/JgLSE/


Welche Methode Sie wählen, davon abhängen, welche Art und Weise leichter zu pflegen ist. Wenn Sie wirklich große Formulare mit nur wenigen Unterschieden haben, können Sie die zweite Methode verwenden. Wenn die Formulare sehr unterschiedlich sind, würde ich nur zwei separate Formulare verwalten und sie entsprechend der Auswahl des Benutzers anzeigen/verbergen, da dies weniger verwirrend oder kompliziert ist.

+0

Ok, danke, aber du hast den Namen vergessen = "route" und value = "product/search". Würden Sie die erste Methode für dieses Problem vorschlagen? – reitermarkus

+0

Wenn es keinen Grund gibt, dass die Formulare kombiniert werden müssen, und Sie beide in Ordnung sind, würde ich definitiv mit der ersten Lösung gehen, weil es sauberer ist. Soweit der 'name =" route "', habe ich absichtlich dort drin gelassen, vorausgesetzt, die 'blogsform' würde das äußere Feld ignorieren, aber Sie könnten das Eingabefeld auch dynamisch hinzufügen/entfernen. – mellamokb

+0

Danke, es funktioniert in jsFiddle, aber nicht auf der tatsächlichen Website. Kann ein Problem bei der Cloudflare-Minimierung sein. – reitermarkus

Verwandte Themen