Autocomplete + replaceWith

0

Witam.
Jako, że jQuery dopiero zaczynam poznawać potrzebuję Waszej pomocy, dla Was pewnie będzie to drobiazg a ja się kurczę męczę.
Tak wyglądu mini struktura dokumentu:

<p>
<input type="text" id="tekst" />
<input type="text" class="ile" value="1" style="width: 50px" />
<input type="button" onclick="addProduct()" value="Dodaj" />
<label id="produkt">: </label>
<label id="cos"></label>
</p>

Używam pluginu Autocomplete. Chodzi o to, że gdy wybieram pewną pozycję z listy rozwijalnej, po wybraniu klikam przycisk który uaktywnia funkcja która wysyła żądaniem post coś do kontrolera. Tutaj wszystko działa sprawnie.

 
$(function () {
            $('#tekst').autocomplete(
                {
                    source: '/Zamowienie/FilterProducts'
                }
                }
            )
            })

function addProduct() {
            $.post('/Zamowienie/AddProduct', { "nazwa": $('#tekst').val(), "ile": $('.ile').val(), "idKlienta": 6 }).done(handleProductAddition);
            
        }



Na koniec dane wracają, są wstawiane w label i przy okazji tworzy się kolejne pole typu input, z już innym id.

function handleProductAddition(data) {
            $("#produkt").text(data.Nazwa);
            $("#tekst").val("");
            $("#tekst").focus();
            $("#cos").replaceWith('<input type="text" id = "xyz"/><input type="button" value="test" onclick="x()"/>');
        }

Mam drugą funkcję Autocomplete, która powinna operować na tym nowo utworzonym polu ale za nic nie mogę jej zmusić do działania.

$(function () 
                {$('#xyz').autocomplete(
                  {
                    source: '/Zamowienie/FilterProducts'
                  }
                }
            )
            })

Pewnie trzeba coś przeładować tak aby plugin widział te nowe pole, ale nie wiem jak to zrobić. Byłbym wdzięczny o jakieś o wskazówki.
Pozdrawiam

0

autocomplete odpalic sie powinien bez problemu, ale domyslam sie ze podmieniajac te textboxy zostawiasz takie samo id dla wszystkich podmienionych. id jest unikalne i moze byc uzyte raz, stad przerzuc sie na klasy i kazdemu elementowi nadaj ta sama klase i odwoluj sie po klasie.

0

Właśnie Id są różne, dlatego zrobiłem dwie funkcje. Ale zaraz sprawdzę jak to się będzie sprawowało na klasach. Dzięki za szybką odpowiedź.
Poza tym nie podmieniam textboxa tylko dodaję nowego w miejsce diva za pomoca replaceWith, z nowym Id, ten stary zostaje w spokoju, nie tykam go. :)

Edit: Sprawdziłem i niestety jest to samo nawet na klasach. Dodam tylko, że używam tego wszystkiego na stronie ASP.NET MVC 4. Może tutaj upatrywać przyczyny?

0

waznym elementem jest tu ze ta druga funkcja z autocomplete wywolywana jest na pocztku strony, czyli zanim element wygeneriowany istnieje.

przesun funkcje bindujaca autocomplete do pola za fragment kodu ktory odpowiada za jego generowanie:

czyli:

$("#produkt").text(data.Nazwa);
            $("#tekst").val("");
            $("#tekst").focus();
            $("#cos").replaceWith('<input type="text" id = "xyz"/><input type="button" value="test" onclick="x()"/>');
        $('#xyz').autocomplete(
                  {
                    source: '/Zamowienie/FilterProducts'
                  }
}

ew. gdyby elementow bylo wiecej w przyszlosci i chcialbys je spiac w jednym miejscu to przezuc sie na klasy i binduj tak:

    $(".klasaNowoUtworzonychInputow").live("focus.autocomplete", null, function () {
        $(this).autocomplete({
            source: '/Zamowienie/FilterProducts'
        });
    });
0

Nie wiem dlaczego ale wraz mi to nie działa. Dla pierwszego inputa wszystko jest ok, ale jak wstawię drugi to już autocomplete na nim nie chce działać. Ktoś ma pomysł co tu może być nie tak?

Próbowałem też .live() zamienić na .on() gdyż ten pierwszy już chyba nie jest używany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1