Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Ajax/jQuery] Przesłanie zmiennej do formularza
Forum PHP.pl > Forum > XML, AJAX
Przemo75
Witam,
Chciałbym, żeby po kliknięciu w przycisk ZAMÓW, otworzył się (ukryty) formularz, a w temacie formularza automatycznie pojawiły się (wygenerowane) dane - pola $nazwa $nr_katalogowy, a po kliknięciu w przycisk WYŚLIJ formularza lub poza nim, ten zniknął/
  1. <?php
  2. echo "<div id=\"container\">
  3. <ul class=\"list\">
  4. <li>
  5. <section class=\"list-top\">
  6.  
  7. <h5 class=\"title\">
  8. <span class=\"temat\">$nazwa $nr_katalogowy</span>
  9. </h5>
  10.  
  11. <span class=\"priceH\">Cena brutto: <b>$c_brutto</b> zł</span>
  12. <span class=\"tech\">
  13. <b>Numer katalogowy:</b> $nr_katalogowy <br/>
  14. </span>
  15. </section>
  16.  
  17. <section class=\"list-right\">
  18. <span><a class=\"zamow\">ZAMÓW</a></span>
  19. </section>
  20. <div class=\"clearfix\"></div>
  21. </li>
  22. </ul>
  23. </div>";
  24. ?>


Formularz:
  1. <div id="zamow" style="display:none" >
  2. <section id="formularz">
  3. <div class="form-container">
  4. <div class="col-md-12">
  5. <form id="main-contact-form" class="formularz" name="formularz" method="post" action="sendemail.php">
  6. <input type="text" class="form-control" id="title" name="title" required="required" placeholder="Temat *" value="<?php echo $formtyt; ?>">
  7. <input type="text" class="form-control" id="name" name="name" required="required" placeholder="Imię *">
  8. <input type="text" class="form-control" id="number" name="number" placeholder="Telefon">
  9. <input type="email" class="form-control" id="email" name="email" required="required" placeholder="Adres e-mail *">
  10. <textarea class="form-control" rows="3" id="message" name="message" required="required" placeholder="Wiadomość *"></textarea>
  11. <button class="btn btn-default" id="submit" type="submit" name="submit" >WYŚLIJ</button>
  12. <button class="btn btn-default" id="reset" type="reset" name="reset" >Wyczyść</button>
  13. </form>
  14. </div>
  15. </div>
  16. </section>
  17. </div>


Niestety mam problem z ajax'em, który mi nie działa.
Kod
$(document).ready(function() {

// Contact form
    var form = $('#main-contact-form');
    form.submit(function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            url: $(this).attr('action'),
            method: 'POST',
            data: form.serialize(),
            beforeSend: function(){
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Wysyłanie wiadomości ...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
        });
    });


    $('body').on('click','span.zamow',function()
    {
        var formtyt = $(this).parent().parent().find('span.temat').html();
    alert(formtyt);    
        $('body').find('form#main-contact-form').find('input.title').val(formtyt);
    });
});

Będę wdzięczny za wszelką pomoc.
nospor
Pytanie, ktore w tym miesiacu byla zadane petryliard razy: co znaczy/czym sie objawia to "NIE DZIALA" ?
Przemo75
Przepraszam za brak precyzji.
Niestety nie działa już sam początek, czyli brak reakcji na kliknięcie w ZAMÓW.

Miałem wcześniej działającą akcję, ale to chyba nie było właściwe rozwiązanie:
Kod
<script language="javascript" type="text/javascript">
var last = '';
function hide(id)
{
    document.getElementById(id).style.display='none';
}

function show(id)
{
    if(last)
        hide(last)
    last = id;
    document.getElementById(id).style.display='block';
}
</script>

i wywołanie akcji:
Kod
<span><a class=\"zamow\" href=\"java script:show('zamow')\">ZAMÓW</a></span>
viking
Wstaw console.log(jakas zmienna np event); i zobacz co się dzieje, czy się wykonuje kod.
Przemo75
Consola niestety niczego nie pokazuje
viking
Jeśli kompletnie niczego nie pokazuje chociaż masz to zdarzenie podpięte to znaczy że zły element podałeś.
Przemo75
Szczerze mówiąc, to nie jestem pewien, czy w ogóle mam poprawnie napisanego ajaxa i poprawne odwołanie
Kod
    $(".zamow").on('click','span.zamow',function()
    {
    console.log(".zamow");
        var formtyt = $(this).parent().parent().find('span.temat').html();
    alert(formtyt);    
        $('body').find('form#main-contact-form').find('input.title').val(formtyt);
    });
viking
No nie bardzo.
$('#container').on('click', '.zamow', function(){})

https://prophp.pl/article/28/propagacja_i_d...en_w_javascript
Przemo75
To chyba też nie to. Wciąż brak info w consoli.
viking
https://jsfiddle.net/b612ntr7/
Przemo75
W jsfiddle'u pokazuje mi taką samą zawartość consoli jak u mnie.
Consola.png
viking
Bo tu dodałem czerwony kolor po kliknięciu.
Przemo75
Tak, wiem.
Podmieniłem kod, do celów testowych, na ten Twój:
Kod
$('#container').on('click', '.zamow', function(e){
    e.preventDefault();
    $(this).css({'background': 'red'})
})

ale niestety u mnie to nie działa, a wydaje mi się, że powinno. Czyż nie?
viking
W takim razie czegoś tu nie mówisz np nie osadziles jquery albo coś jest inaczej generowane.
Przemo75
Raczej wszystko jest OK, ponieważ np. poniższy kod
Kod
    $(".zamow").click(function()
    {
        var formtyt = $(this).parent().parent().find('span.temat').html();
    alert(formtyt);    
        $('body').find('form#main-contact-form').find('input.title').val(formtyt);
    });

w połączeniu z tym
Kod
<script language="javascript" type="text/javascript">
var last = '';
function hide(id)
{
    document.getElementById(id).style.display='none';
}

function show(id)
{
    if(last)
        hide(last)
    last = id;
    document.getElementById(id).style.display='block';
}
</script>

i z tym
Kod
<span><a class=\"zamow\" href=\"java script:show('zamow')\" >ZAMÓW</a></span>

powoduje pokazanie się ukrytego formularza.
Niestety w pierwszym polu, w którym miałaby się pojawić przekazana zmienna wyświetla się
<br /><font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'><tr><th align='left' bgcolor='#f57900' colspan=
a poniżej błąd:
Notice: Undefined variable: formtyt in C:\wamp\www\Resale\zaczepy.php on line 71 Call Stack #TimeMemoryFunctionLocation 10.0017372936{main}( )...\zaczepy.php:0 ">
viking
Jedno nie ma nic wspólnego z drugim (js wykonuje się dawno jak php przestaje działać) chyba że masz taki śmietnik w strukturze dom że nic nie jest poprawnie pozamykane.
Przemo75
Witam,
W jaki sposób zmodyfikować hide('zamow'); żeby zadziałało dopiero po komunikacie o wysłaniu wiadomości "text-success"?

Kod
    var form = $('#main-contact-form');
    form.on('submit', function(event){
        event.preventDefault();
        var form_status = $('<div class="form_status"></div>');
        $.ajax({
            url: $(this).attr('action'),
            method: 'POST',
            data: form.serialize(),
            beforeSend: function() {
                form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Wysyłanie wiadomości ...</p>').fadeIn() );
            }
        }).done(function(data){
            form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
            hide('zamow');
        });
    });


W chwili obecnej, po wysłaniu formularza, ten od razu się zamyka, bez wyświetlenia komunikatu o poprawnym wysłaniu wiadomości.
Jak usunę hide('zamow'); to komunikat się pojawia, ale nie zamyka się formularz.
Próbowałem zmienić hide('zamow'); na np. $('#zamow').hide(1000); ale wówczas wysyła nawet kilkanaście wiadomości.
trueblue
  1. $('#zamow').delay(3000).hide(0);


Przemo75
Pięknie dziękuję. Działa jak trzeba. :-)

Wracając do formularza

  1. <div id="zamow" style="display:none" >
  2. <section id="formularz">
  3. <div class="form-container">
  4. <div class="col-md-12">
  5. <form id="main-contact-form" class="formularz" name="formularz" method="post" action="sendemail.php">
  6. <span class="close">x</span>
  7. <input type="text" class="form-control" id="title" name="title" required="required" placeholder="Temat *">
  8. <input type="text" class="form-control" id="name" name="name" required="required" placeholder="Imię *">
  9. <input type="text" class="form-control" id="number" name="number" placeholder="Telefon">
  10. <input type="email" class="form-control" id="email" name="email" required="required" placeholder="Adres e-mail *">
  11. <textarea class="form-control" rows="3" id="message" name="message" required="required" placeholder="Wiadomość *"></textarea>
  12. <button class="btn btn-default" id="submit" type="submit" name="submit" >WYŚLIJ</button>
  13. <button class="btn btn-default" id="reset" type="reset" name="reset" >Wyczyść</button>
  14. </form>
  15. </div>
  16. </div>
  17. </section>
  18. </div>

[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function() {
  2. var form = $('#main-contact-form');
  3. form.on('submit', function(event){
  4. event.preventDefault();
  5. var form_status = $('<div class="form_status"></div>');
  6. $.ajax({
  7. url: $(this).attr('action'),
  8. method: 'POST',
  9. data: form.serialize(),
  10. beforeSend: function() {
  11. form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Wysyłanie wiadomości ...</p>').fadeIn() );
  12. }
  13. }).done(function(data){
  14. form_status.html('<p class="text-success">' + data.message + '</p>').delay(3000).fadeOut();
  15. // hide('zamow');
  16. $('#zamow').delay(3000).hide(0);
  17. });
  18. });
  19.  
  20. $('#display').on('click', '.product .zamow', function(event) {
  21. event.preventDefault();
  22. var formtyt = $(this).parents('li').find('.list-top span.temat').html();
  23. $('#main-contact-form > #title').val(formtyt);
  24. show('zamow');
  25. });
  26.  
  27. $('#zamow').on('click', '.close', function(event) {
  28. event.preventDefault();
  29. hide('zamow');
  30. });
  31. });
[JAVASCRIPT] pobierz, plaintext


Na stronie produktu głównego mam kilka produktów dodatkowych, do wyboru.
W jaki sposób przerobić formularz, żeby oprócz produktu głównego można było "załączyć" do formularza jeden z produktów dodatkowych, do wyboru.

W jaki sposób "wyciąć" tagi html
[JAVASCRIPT] pobierz, plaintext
  1. $('#display').on('click', '.product .zamow', function(event) {
  2. event.preventDefault();
  3. var formtyt = $(this).parents('li').find('.list-top span.temat').html();
  4. $('#main-contact-form > #title').val(formtyt);
  5. show('zamow');
  6. });
[JAVASCRIPT] pobierz, plaintext

gdzie przykładowy "formtyt" może wyglądać tak:

Kula mocowana na dwie śruby<br>ALFA ROMEO 145 1994 / 2001
trueblue
  1. var formtyt = $(this).parents('li').find('.list-top span.temat').text();
Przemo75
Ależ to było proste. :-o Wielkie dzięki. :-)
Kombinowałem z tym text na różne sposoby, ale chyba tego nie sprawdziłem.

@trueblue można się z Tobą jakoś skontaktować na priv?
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.