Závislé selectboxy a plugin select2
- schnappi
- Člen | 13
Ahoj,
pracujem na spracovávaní závislých selectBoxov, kde podľa výberu možnosti z prvého selectBoxu sa dynamicky mení obsah druhého selectBoxu. Používam pritom AJAXové spracovanie, môj JS kód vyzerá asi takto:
<script>
$('#mySelect1').off('change').on('change', function () {
var myValue = 0;
// ...
$.nette.ajax({
type: 'GET',
url: {link {$link}!},
data: {
'myForm-myValue': myValue,
}
});
</script>
Všetko funguje dobre, volá sa správny handler so správnymi hodnotami. V handleri potom upravím druhý selectbox a pomocou metódy redrawControl(‚…‘) ho úspešne prekreslím.
Nad selectboxami ale používam plugin select2. Takto inicializujem daný selectbox:
<script>
$('#mySelect2').select2({
width: '100%',
theme: 'bootstrap',
language: 'cs',
});
</script>
A tiež to funguje. Až do chvíle než refreshnem druhý selectbox pomocou
handleru. Na iných fórach som našiel, že je možné daný select zrušiť
pomocou .select2('destroy')
a znova reinicializovať. Alebo že je
možné jednoducho upraviť dáta tela select2 (pri udalosti onChangeEvent
selectu). Ale vyzerá to tak, že vždy po naplnení dát do select2 sa vykoná
handler vyššie a požadovaný selectbox znova prekreslí tak, že select2 nad
ním nefunguje.
Nestretol sa s tým niekto alebo nevedel by niekto poradiť. Za každú odpoveď ďakujem.
- Mistrfilda
- Člen | 76
Ahoj, nejsem si úplně jistý jestli je to čisté řešení :), ale zkusím to. Udělal bych si snippet nad druhým scriptem:
{snippet select2Script}
<script>
$('#mySelect2').select2({
width: '100%',
theme: 'bootstrap',
language: 'cs',
});
</script>
{/snippet}
A potom v handle metodě, kde ho plníš daty, bych ho po naplnění a překreslení zavolal
<?php
public function handleFill($id)
{
//naplnění daty
$this->redrawControl(.....); //překreslení selectboxu
$this->redrawControl('select2Script'); //překreslení scriptu pro select2
}
?>