Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JQuery] metoda find na dynamicznej treści
melior
post 22.05.2012, 13:53:24
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
k_@_m_i_l
post 22.05.2012, 14:24:14
Post #2





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

Ostrzeżenie: (0%)
-----


W akcji gdzie dopisujesz te inputy,(po dodaniu już inputu) pobierz na nowo te elementy. I powinno działać bezproblemowo.


--------------------
"PHP to człowiek. MySQL to również człowiek."
Go to the top of the page
+Quote Post
d3ut3r
post 22.05.2012, 14:29:58
Post #3





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


tutaj przykład

http://jsfiddle.net/x7PtK/

i wszystko działa bez żadnych zabiegów.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
melior
post 22.05.2012, 14:44:47
Post #4





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

Ostrzeżenie: (0%)
-----


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);
Go to the top of the page
+Quote Post
d3ut3r
post 22.05.2012, 15:51:19
Post #5





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


Jesteś pewien, że funkcja checkForm wykonuje się już po odebraniu danych i wstawieniu pól do formularza ?

Masz gdzieś online swój kod ?


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
melior
post 23.05.2012, 08:53:10
Post #6





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
k_@_m_i_l
post 23.05.2012, 09:16:38
Post #7





Grupa: Zarejestrowani
Postów: 349
Pomógł: 72
Dołączył: 22.01.2008
Skąd: Wadowice/Oświęcim

Ostrzeżenie: (0%)
-----


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(){...});

?

Ten post edytował k_@_m_i_l 23.05.2012, 09:16:53


--------------------
"PHP to człowiek. MySQL to również człowiek."
Go to the top of the page
+Quote Post
melior
post 23.05.2012, 10:12:06
Post #8





Grupa: Zarejestrowani
Postów: 68
Pomógł: 3
Dołączył: 7.12.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował melior 23.05.2012, 10:28:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 14:38