2012-05-12 96 views
6

Używam bootstrapu Twittera i muszę przekazać ograniczoną listę wyboru pól wyboru do mojego serwera w celu przetworzenia. Pole wyboru HTML wygląda następująco:Czy mogę przekazać wiele wartości pola wyboru o jednej nazwie?

<div class="controls"> 
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="190">TEST 190</label> 
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="200">TEST 200</label> 
    <label class="checkbox"><input type="checkbox" name="my_match[]" value="210">TEST 210</label> 
</div> 

... 

$.post("form.php", $("#form_id").serialize(), function(){ 
    ... 
}); 

olewam wartości formularza jako odcinkach łańcucha przy użyciu jquery ale wartości są wysyłane tak:

my_match=190&my_match=200 

Czy jest możliwe, aby wysłać je w następujący format?

Nie jestem pewien, czy muszę zmienić kod HTML, czy to jest coś, co muszę obsługiwać z javascript. jakieś pomysły?

Odpowiedz

12

Coś takiego byłoby rade:

<div class='controls'> 
    <label class="checkbox"> 
     <input type="checkbox" name="my_match[]" value="190">TEST 190</label> 
    <label class="checkbox"> 
     <input type="checkbox" name="my_match[]" value="200">TEST 200</label> 
    <label class="checkbox"> 
     <input type="checkbox" name="my_match[]" value="210">TEST 210</label> 
</div> 

<form> 
    <input id='my_match' type='hidden' name='my_match[]' /> 
    <button>Submit</button> 
</form> 

$('form').submit(function() { 
    var arr=[]; 

    $('input:checked[name=my_match[]]').each(function(){ 
     arr.push($(this).val()); 
    }); 

    $('#my_match').val(arr.join(':')); 
    alert($('#my_match').val()); 

    // Prevent actual submit for demo purposes: 
    return false; 
}); 
​ 
​ 

Try out the fiddle


Edit: To jest dokładnie to, co w zasadzie Chase opisał w swojej odpowiedzi.

+0

Połączenie tego i ukrytego pola załatwiło sprawę. Dzięki! – Paul

4

Uważam, że pola o tej samej nazwie wracają z listą oddzielonych przecinkami. Możesz utworzyć ukryte pole, dodać zaznaczone pola wyboru tak, jak chcesz, a następnie wysłać ukryte pole.

0

Dla każdego, kto dostaje przyniósł tutaj przez Google:

Do mojej najlepszej wiedzy, JavaScript jest jedynym sposobem, aby uczynić z nich ciąg z separatorów, ponieważ komplikuje jeśli chcesz ogólne rozwiązanie, które może zajmować ze wszystkimi możliwymi żądanymi separatorami i obsługuje wychodzenie z separatora, jeśli pojawia się w jednym z łańcuchów wartości.

Jeśli to możliwe, zdecydowanie zalecamy zaakceptowanie formatu my_match=190&my_match=200 i przekonwertowanie ich na serwerze.

W PHP jest to automatyczne, jeśli wstawisz [] na końcu nazwy. W innych językach, takich jak Python, zwykle będzie specjalny getter, który zwraca listę zamiast pojedynczej wartości. (Na przykład: request.POST.getlist('my_match') w Django)

Opieranie się na JavaScript sprawia, że ​​twoja strona jest bardziej delikatna, ponieważ niestabilne połączenie, usterka sieci lub zepsuta zapora ogniowa warstwy aplikacji może uniemożliwić załadowanie kodu JavaScript lub opóźnić go na tyle długo, aby użytkownik mógł aby spróbować kliknąć Prześlij bez niego.

(Jeśli wyłączysz przycisk przesyłania, dopóki JavaScript nie zostanie załadowany, po prostu denerwujesz i/lub udaremniasz odwiedzających i sprawisz wrażenie, że twoja witryna jest tandetnie zbudowana, ponieważ wszyscy inni dobrze sobie radzą bez tego ograniczenia Zawsze pamiętaj, że Twoje działania wpływają na pierwsze wrażenie, jakie robisz.)

... nie wspominając, w zależności od JavaScriptu, kiedy nie jest to konieczne (np. Menu rozwijane bez formularza rezerwowego :hover, formularze brawurowo wymagają JavaScript do przesłania itp.) denerwuje ludzi takich jak ja, którzy używają białych list narzędzi JavaScript, takich jak NoScript do:

  1. Twórz reklamy internetowe i "weź ankietę!" pełnoekranowe mniej irytujące
  2. Zmniejszyć spowolnienie posiadania ton zakładek i rozszerzeń otwarte
  3. ograniczyć szanse, że 0-day exploit uda

Jeśli koniecznie koniecznością użycie JavaScript w takiej sytuacji , pamiętaj, aby użyć znacznika <noscript>, aby ostrzec ludzi przed ładowaniem z włączoną obsługą JavaScript przed wypełnieniem formularza przez.

Powiązane problemy