Thread View: pl.comp.lang.javascript
9 messages
9 total messages
Started by Łukasz
Sat, 05 Mar 2016 23:02
problem z formularzem
Author: Łukasz
Date: Sat, 05 Mar 2016 23:02
Date: Sat, 05 Mar 2016 23:02
85 lines
3338 bytes
3338 bytes
Mam problem z danymi formularza, które nie są przekazywane.
Po zatwierdzeniu formularza, przekazywana jest jedynie zmienna id.
Natomiast id2 oraz file1 nie.
Proszę o wskazówki bo utknąłem :/
w pliku index mam:
<!-- awizo - pliki -->
<div class="modal fade" id="modal_awizo_pliki" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content"></div>
</div>
</div>
function awizo_pliki(id) {
$.ajax({
url : "awizo_plik_modal.php?id="+id,
type: "GET",
data: id,
success: function(data) {
$('#modal_awizo_pliki').modal('show');
$('.modal-content').show().html(data);
//console.log(r);
}
});
}
function pliki_edytuj() {
var formData = new FormData($('#awizo_pliki_edytuj')[0]);
$.ajax({
url: 'awizo_db.php?a=pliki_edytuj',
type: "POST",
data: formData,
cache:false,
contentType: false,
processData: false,
success: function(response)
{
console.log(response);
$('#modal_awizo_pliki').modal('hide');
},
error: function (jqXHR, textStatus, errorThrown)
{
//alert(data);
console.log(data);
}
});
}
modal wywołuję przyciskiem z awizo_pliki(id)
plik awizo_plik_modal.php wygląda tak, oczywiście w uproszczeniu bo mam
tam trochę kodu który pobiera dane z bazy:
<?php
$id = strip_tags($_GET['id']);
?>
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-label="Zamknij"><span aria-hidden="true">×</span></button>
<h3 class="modal-title">Pliki</h3>
</div>
<div class="modal-body">
<form action="#" id="awizo_pliki_edytuj"
class="form-horizontal" enctype="multipart/form-data">
<input id="id" name="id" type="hidden" value="<?php echo $id;
?>" />
<input id="id2" name="id2" type="text" />
<input type="file" id="file1" name="file1" />
</form>
</div>
<div class="modal-footer">
<button type="button" id="btnSave" onclick="pliki_edytuj()"
class="btn btn-primary">Dodaj / Zmień</button>
<button type="button" class="btn btn-danger"
data-dismiss="modal">Zamknij</button>
</div>
--
Pozdrawiam
Łukasz
Re: problem z formularzem
Author: Cezary Tomczyk
Date: Sat, 05 Mar 2016 23:38
Date: Sat, 05 Mar 2016 23:38
97 lines
4049 bytes
4049 bytes
On 05/03/2016 23:02, Łukasz wrote:
> Mam problem z danymi formularza, które nie są przekazywane.
> Po zatwierdzeniu formularza, przekazywana jest jedynie zmienna id.
> Natomiast id2 oraz file1 nie.
> Proszę o wskazówki bo utknąłem :/
>
> w pliku index mam:
>
> <!-- awizo - pliki -->
> <div class="modal fade" id="modal_awizo_pliki" role="dialog">
> <div class="modal-dialog modal-lg">
> <div class="modal-content"></div>
> </div>
> </div>
>
> function awizo_pliki(id) {
> $.ajax({
> url : "awizo_plik_modal.php?id="+id,
> type: "GET",
> data: id,
> success: function(data) {
>
> $('#modal_awizo_pliki').modal('show');
> $('.modal-content').show().html(data);
> //console.log(r);
> }
> });
> }
>
> function pliki_edytuj() {
>
> var formData = new FormData($('#awizo_pliki_edytuj')[0]);
> $.ajax({
> url: 'awizo_db.php?a=pliki_edytuj',
> type: "POST",
> data: formData,
> cache:false,
> contentType: false,
> processData: false,
> success: function(response)
> {
> console.log(response);
> $('#modal_awizo_pliki').modal('hide');
> },
> error: function (jqXHR, textStatus, errorThrown)
> {
> //alert(data);
> console.log(data);
> }
> });
> }
>
> modal wywołuję przyciskiem z awizo_pliki(id)
> plik awizo_plik_modal.php wygląda tak, oczywiście w uproszczeniu bo mam
> tam trochę kodu który pobiera dane z bazy:
> <?php
> $id = strip_tags($_GET['id']);
> ?>
> <div class="modal-header">
> <button type="button" class="close" data-dismiss="modal"
> aria-label="Zamknij"><span aria-hidden="true">×</span></button>
> <h3 class="modal-title">Pliki</h3>
> </div>
>
> <div class="modal-body">
>
> <form action="#" id="awizo_pliki_edytuj"
> class="form-horizontal" enctype="multipart/form-data">
> <input id="id" name="id" type="hidden" value="<?php echo $id;
> ?>" />
> <input id="id2" name="id2" type="text" />
> <input type="file" id="file1" name="file1" />
> </form>
> </div>
>
> <div class="modal-footer">
> <button type="button" id="btnSave" onclick="pliki_edytuj()"
> class="btn btn-primary">Dodaj / Zmień</button>
> <button type="button" class="btn btn-danger"
> data-dismiss="modal">Zamknij</button>
> </div>
Nie podpinaj inline event handlerów -> onclick="pliki_edytuj()". Problem
tutaj masz taki, że funkcja pliki_edytuj jest wywoływana w globalnym
kontekście, czyli window, a jej tam nie ma. A przynajmniej domyślam się,
że jej tam nie ma ;-)
Zamiast inline event handlerów zrób to poprawnie:
$('#btnSave').click(pliki_edytuj);
https://jsfiddle.net/sygd9aa3/1/
--
Cezary Tomczyk
http://www.ctomczyk.pl/
Re: problem z formularzem
Author: Łukasz
Date: Sun, 06 Mar 2016 09:47
Date: Sun, 06 Mar 2016 09:47
24 lines
1522 bytes
1522 bytes
W dniu 06.03.2016 o 00:38, Cezary Tomczyk pisze:
> Zamiast inline event handlerów zrób to poprawnie:
>
> $('#btnSave').click(pliki_edytuj);
>
> https://jsfiddle.net/sygd9aa3/1/
>
Cześć.
Próbuję zrobić jak piszesz, czyli button wygląda tak:
<button type="button" id="12345" class="btn btn-primary">Dodaj /
Zmień</button>
i do tego wywołanie:
<script type="text/javascript">
$('#12345').click(pliki_edytuj);
</script>
Jednak funkcja pliki_edytuj nie jest wywoływana.
Co tu robię źle?
--
Pozdrawiam
Łukasz
Re: problem z formularzem
Author: Cezary Tomczyk
Date: Sun, 06 Mar 2016 10:47
Date: Sun, 06 Mar 2016 10:47
80 lines
2915 bytes
2915 bytes
On 06/03/2016 09:47, Łukasz wrote:
> W dniu 06.03.2016 o 00:38, Cezary Tomczyk pisze:
>> Zamiast inline event handlerów zrób to poprawnie:
>>
>> $('#btnSave').click(pliki_edytuj);
>>
>> https://jsfiddle.net/sygd9aa3/1/
>>
>
> Cześć.
> Próbuję zrobić jak piszesz, czyli button wygląda tak:
> <button type="button" id="12345" class="btn btn-primary">Dodaj /
> Zmień</button>
>
> i do tego wywołanie:
> <script type="text/javascript">
> $('#12345').click(pliki_edytuj);
> </script>
>
> Jednak funkcja pliki_edytuj nie jest wywoływana.
> Co tu robię źle?
Podejrzewam, że "pliki_edytuj" jest niezdefiniowaną referencją.
Odwołujesz się do czegoś, co nie istnieje.
Zrób tak:
1. W Google Chrome w narzędziach developera ustawi breakpoint na linię:
$('#12345').click(pliki_edytuj);
2. Jak przeglądarka podczas uruchomienia aplikacji zatrzyma się na tym
breakpoincie to najedź myszką na pliki_edytuj i sprawdź, jaki będzie
rezultat. Są dwie opcje: undefined albo function.
Jeśli będziesz miał undefined, co jest wysoce prawdopodobne, to znaczy,
że odwołujesz się do funkcji, do której nie masz dostępu. Musisz mieć
dostęp do funkcji pliki_edytuj.
Przykład:
kontekst globalny window
var pliki_edytuj = (function() {
function pliki_edytuj() {
window.alert('pliki_edytuj');
}
}());
pliki_edytuj();
Uruchomienie powyższego kończy się błędem:
Uncaught ReferenceError: pliki_edytuj is not defined
https://jsfiddle.net/tv65wf7k/
Jeśli jednak zrobisz:
var pliki_edytuj = (function() {
function pliki_edytuj() {
window.alert('pliki_edytuj');
}
return pliki_edytuj;
}());
pliki_edytuj();
to otrzymasz rezultat window.alert();
https://jsfiddle.net/tv65wf7k/1/
--
Cezary Tomczyk
http://www.ctomczyk.pl/
Re: problem z formularzem
Author: Łukasz
Date: Sun, 06 Mar 2016 12:16
Date: Sun, 06 Mar 2016 12:16
16 lines
1577 bytes
1577 bytes
W dniu 06.03.2016 o 00:38, Cezary Tomczyk pisze:
> Nie podpinaj inline event handlerów -> onclick="pliki_edytuj()". Problem
> tutaj masz taki, że funkcja pliki_edytuj jest wywoływana w globalnym
> kontekście, czyli window, a jej tam nie ma. A przynajmniej domyślam się,
> że jej tam nie ma ;-)
>
> Zamiast inline event handlerów zrób to poprawnie:
>
> $('#btnSave').click(pliki_edytuj);
>
> https://jsfiddle.net/sygd9aa3/1/
>
Jak ustawię sobie breakpoint to widzę że pliki_edutuj się wykonuje, ale
var formData = new FormData($('#awizo_pliki_edytuj')[0]);
zwraca undefined
Re: problem z formularzem
Author: Cezary Tomczyk
Date: Sun, 06 Mar 2016 12:34
Date: Sun, 06 Mar 2016 12:34
41 lines
2489 bytes
2489 bytes
On 06/03/2016 12:16, Łukasz wrote:
> W dniu 06.03.2016 o 00:38, Cezary Tomczyk pisze:
>> Nie podpinaj inline event handlerów -> onclick="pliki_edytuj()". Problem
>> tutaj masz taki, że funkcja pliki_edytuj jest wywoływana w globalnym
>> kontekście, czyli window, a jej tam nie ma. A przynajmniej domyślam się,
>> że jej tam nie ma ;-)
>>
>> Zamiast inline event handlerów zrób to poprawnie:
>>
>> $('#btnSave').click(pliki_edytuj);
>>
>> https://jsfiddle.net/sygd9aa3/1/
>>
>
> Jak ustawię sobie breakpoint to widzę że pliki_edutuj się wykonuje, ale
> var formData = new FormData($('#awizo_pliki_edytuj')[0]);
> zwraca undefined
Ustaw breakpoint na tę linię i sprawdź w konsoli (albo zaznaczając)
wynik tego:
$('#awizo_pliki_edytuj');
Jeśli wynik będzie [] to znaczy, że nie ma w tym momencie (jeszcze)
formularza o id="awizo_pliki_edytuj".
Widzę kilka opcji:
1. Klikasz tak szybko w button, że formularz nie został jeszcze
załadowany i wywołuje to w/w błąd undefined :-)
2. Formularz nie został załadowany w ogóle.
3. Formularz został załadowany, ale zawiera błędy i nie mógł być dodany
do DOM. Ustaw breakpoint na pierwszą linię w "success" callback, gdzie
ładujesz formularz i sprawdź co robi callback "success". Innymi słowy
upewnij się, że formularz jest poprawnie załadowany i dodany do DOM.
--
Cezary Tomczyk
http://www.ctomczyk.pl/
Re: problem z formularzem
Author: Łukasz
Date: Mon, 07 Mar 2016 10:55
Date: Mon, 07 Mar 2016 10:55
10 lines
1107 bytes
1107 bytes
Problem rozwiązany, dziękuję za pomoc.
Okazało się że:
$('.modal-content').show().html(data);
modal-content miałem kilka :/
zmiana na:
$('#konkretny_modal').show().html(data);
rozwiązała sprawę.
Re: problem z formularzem
Author: Cezary Tomczyk
Date: Mon, 07 Mar 2016 11:36
Date: Mon, 07 Mar 2016 11:36
20 lines
1544 bytes
1544 bytes
On 07/03/2016 10:55, Łukasz wrote:
> Problem rozwiązany, dziękuję za pomoc.
>
> Okazało się że:
> $('.modal-content').show().html(data);
>
> modal-content miałem kilka :/
>
> zmiana na:
> $('#konkretny_modal').show().html(data);
> rozwiązała sprawę.
W mojej opinii nie powinno się w ogóle używać CSS klas do identyfikacji
elementów w sposób jak wyżej, tj. $('.modal-content'). Wyłącznie
unikalne id. Jeśli już nie można "id" z jakiegoś powodu, to lepiej
atrybut data-*
--
Cezary Tomczyk
http://www.ctomczyk.pl/
Re: problem z formularzem
Author: Łukasz
Date: Mon, 07 Mar 2016 12:57
Date: Mon, 07 Mar 2016 12:57
21 lines
1688 bytes
1688 bytes
W dniu 07.03.2016 o 12:36, Cezary Tomczyk pisze:
> On 07/03/2016 10:55, Łukasz wrote:
>> Problem rozwiązany, dziękuję za pomoc.
>>
>> Okazało się że:
>> $('.modal-content').show().html(data);
>>
>> modal-content miałem kilka :/
>>
>> zmiana na:
>> $('#konkretny_modal').show().html(data);
>> rozwiązała sprawę.
>
> W mojej opinii nie powinno się w ogóle używać CSS klas do identyfikacji
> elementów w sposób jak wyżej, tj. $('.modal-content'). Wyłącznie
> unikalne id. Jeśli już nie można "id" z jakiegoś powodu, to lepiej
> atrybut data-*
>
Jak najbardziej się zgadzam. Przeklepałem to z innego skryptu i nie
zwróciłem na to uwagi.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads