Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] metoda find na dynamicznej treści
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
melior
Mam kod, który wyłapuje mi inputy z klasami integer lub string.

Kod
var element = $( form ).find(".integer, .string");


To działa ślicznie, do momentu, gdy nie dodam jakiegoś inputa poprzez metodę .html().

O ile w internecie jest milion przykładów dla click, jeżeli chodzi o wykorzystanie metod on, delegate, live w tego typu sytuacjach, to nie mogę dojść jak to okodować z find.
Ktoś pomoże?
k_@_m_i_l
W akcji gdzie dopisujesz te inputy,(po dodaniu już inputu) pobierz na nowo te elementy. I powinno działać bezproblemowo.
d3ut3r
tutaj przykład

http://jsfiddle.net/x7PtK/

i wszystko działa bez żadnych zabiegów.
melior
Na prostym przykładzie rzeczywiście działa, ale zamiana html() na append() nie pomogła.

Mam coś takiego:

Kod
<form id="search_form'" action="" method="POST">
//basic data
<input type="text" name="data1" value=""/>
<input type="text" name="data2" value=""/>
//additional data
<input type="text" class="input string" name="otherData1" value=""/>
<input type="text" class="input string" name="otherData2" value=""/>
<input type="text" class="input integer" name="otherData3" value=""/>
<input type="text" class="input integer" name="otherData4" value=""/>
<input type="button" value="send" />
//place to put extra data from AJAX response
<div id="content"></div>
</form>



Kod
var handler = $('#search_form');

function validObligatoryAndType(handler){
    handler.submit(function(event){
        clearExceptions(handler);
        var valid = checkForm(handler);
        if(valid){
            return true;
        }
        else{
            return false;
        }
    });
}

validObligatoryAndType(handler);

function checkForm(form){
var element = $( form ).find(".integer, .string");
var valid = true;
$.each(element, function(key, val){
... //validation
});
return valid;
}

+ funkcja, które pobiera z odpowiedzi AJAX dane i generuje z nich dodatkowe pola input:

propInputs = '...'; // pola input
if(propInputs != ''){propInputs = '<br>Właściwości wybranej kategorii:<br><br><table><tbody>'+propInputs+'</tbody></table>';}
$('#content').append(propInputs);
d3ut3r
Jesteś pewien, że funkcja checkForm wykonuje się już po odebraniu danych i wstawieniu pól do formularza ?

Masz gdzieś online swój kod ?
melior
checkForm na pewno odpala się jedynie na event submit, wtedy kiedy już dodatkowe pola są pobrane i wyświetlane. Dla pewności ustawiłem tam breakpoint i potwierdził to.

Kodu niestety nie mogę udostępnić online sad.gif

Czy jest może szansa zastosować jakieś inne, zastępcze rozwiązanie? Ostatecznie mogę zdecydować się na jquery.validator, ale to niestety wymagałoby sporej przebudowy kodu, który odziedziczyłem. Bardziej myślę o innym sposobie wyłapania zawartości tych extra pól.
k_@_m_i_l
Linię wstaw zaraz po:
  1. element = $( form ).find(".integer, .string");


  1. $('#content').append(propInputs);


Submita odpalasz przez:
  1. $(element).submit(function(){...});

czy przez:
  1. $(element).live("submit",function(){...});

?
melior
Ok znalazłem miejsce gdzie skrypt siada smile.gif

find działał poprawnie.

Problem leżał ciut dalej w kodzie, gdzie odnosiłem się do id elementów. Id tych "nowych" inputów zawierały w nazwie spację... Głupi błąd.
Dzięki za poświęcony czas.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.