Przejdę do rzeczy:
Mamy powiedzmy akcję ajaxową:
Kod
$.ajax({
type: "POST",
url: "index.php?module="+moduleName+"&action=getSearchView&noView=1&field="+val
}).done(function( data ) {
forField.html( data );
});
type: "POST",
url: "index.php?module="+moduleName+"&action=getSearchView&noView=1&field="+val
}).done(function( data ) {
forField.html( data );
});
Do pola <div class="forField"> zostało wrzuconekolejne pole wyszukiwania. Widok:
Kod
<div class="searchFields">
<div class="forField">
<select>Lista pól po których mozna szukac</select>
<select>Warunki (=|!=|>|<|in|not in itd)</select>
<input or select or checkbox> Wartość
<plus i minus> (aby dodać kolejne pole forField takie samo jak to)
<div/>
<div class="forField">
<div/>
....
</div>
<div class="forField">
<select>Lista pól po których mozna szukac</select>
<select>Warunki (=|!=|>|<|in|not in itd)</select>
<input or select or checkbox> Wartość
<plus i minus> (aby dodać kolejne pole forField takie samo jak to)
<div/>
<div class="forField">
<div/>
....
</div>
Tak to mniej więcej wygląda i działa ale mogłoby działać wiele lepiej.
Po pierwsze, nie działa jQuery.live, zalecany jest jQuery.on, ale on nie działa... Przynajmniej tak jak powinien.
<plus i minus> mają .on("click" function(){ ... }) ale te przyciski działają tylko przy tych polach, które są aktualnie wczytane. Nie działają dla tych, których pola zostały wczytane za pomocą przycisku "plus" przy innym polu.
Po drugie, poza akcjami podpiętymi pod plus i minus mam poprzypinane inne akcje tj.
// zapewniam, że składnia w kodzie jest w porządku ($(<input or select or checkbox>) używam tylko dla pokazania ze może tam być różne pole)
$(<input or select or checkbox>).on("keyup || change", function(){....}) też działa tylko dla pierwszego pola, inne pola dodane za pomocą plusa nie działają.
Te pola są dodawane za pomocą AJXA który wkleiłem na samej górze. Jeśli nie da się użyć tego ".on()" normalnie, to może da się zrobić coś takiego:
Kod
$.ajax({
type: "POST",
url: "index.php?module="+moduleName+"&action=getSearchView&noView=1&field="+val
}).done(function( data ) {
forField.html( data );
initPlusMinus( data );
initChangeAndKeyup( data );
});
type: "POST",
url: "index.php?module="+moduleName+"&action=getSearchView&noView=1&field="+val
}).done(function( data ) {
forField.html( data );
initPlusMinus( data );
initChangeAndKeyup( data );
});
ale zmienna"data" to nie referencja do htmlowego obiektu który właśnie został wstawiony tylko zwykły ciąg, string. Jak uzyskać referencje do właśnie wstawionego obiektu htmlowego z danej zmiennej? Biorąc pod uwagę, że może się znajdować nieskończenie wiele dokładnie identycznych pól.