NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Otevření JS okna po reload

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Tomáš Dvořák:16.11.2017 14:41

Ahoj,

mám tento kód pro otevírání okna v okně pomocí colorbox (jquery lightbox):

<script type="text/javascript" language="javascript">
  $(document).ready(function(){
      $(".group3").colorbox({rel:'group3', opacity:0.5});
        $(".ajax").colorbox({
            opacity:0.5 ,
            rel:'ajax',
            width:'1400px',
            height:'800px',
            rel: 'nofollow'
        });
    });
</script>

<a class="ajax" href="file.php?id=<?php echo $id; ?>">Nové okno</a>

Což mi otevře lightbox okno se souborem file.php. V tomto souboru mám dále načítání z DB a možnost měnit inputem přes ajax záznam v DB:

<input size="2" type="text" value="2" name="pocet" id="125" onchange="UpdateRecord(125,0,this.value,this.name)">

function UpdateRecord(id,a,data,name){

            jQuery.ajax({
             type: "POST",
             url: "update.php",
             data: 'id='+id+'&a='+a+'&'+name+'='+data,
             cache: false,
             success: function(response)
             {
               alert("Záznam byl úspěšně změněn.");
               location.reload();
             }
           });
        }

To mi funguje v pořádku. Nicméně záznam se zapíše, ale v lightbox okně je stále vidět samozřejmě starý počet. Přidal jsem si tam po update v DB location.reload().

Aktualizuje to stránku a já se snažím udělat to, aby se mi znovu otevřelo lightbox okno opět odkazem:

<a class="ajax" href="file.php?id=<?php echo $id; ?>">Nové okno</a>

Jak toho docílit? Pak mě ještě napadá nějak aktualizovat záznam z tabulky, ale to nevím jak přesně provést.

Můžete mě prosím nasměrovat co s tím?

 
Odpovědět
16.11.2017 14:41
Avatar

Člen
Avatar
:16.11.2017 15:26

Máš na mysli niečo ako toto?

$('[href^="file.php"]').click()

Proste programovo vyvolať klik na ten odkaz?

 
Nahoru Odpovědět
16.11.2017 15:26
Avatar
Tomáš Dvořák:16.11.2017 15:34

To sice ano, ale háček je v tom, že potřebuji otevřít colorbox okno s parametry, které jsou definované v class=ajax. A to je to co se mi nedaří.

V podstatě po reloadu potřebuji základním souboru vědět že došlo k reloadu z file.php s id tím a tím a otevřít znovu:

<a class="ajax" href="file.php?id=<?php echo $id; ?>">Nové okno</a>
Editováno 16.11.2017 15:36
 
Nahoru Odpovědět
16.11.2017 15:34
Avatar

Člen
Avatar
Odpovídá na Tomáš Dvořák
:16.11.2017 16:08

Už rozumiem... A čo znamená "dať vedieť"? Čo sa má stať v tom základnom súbore?

 
Nahoru Odpovědět
16.11.2017 16:08
Avatar
Tomáš Dvořák:16.11.2017 16:14

Ze základního souboru otevírám myší pomocí odkazu ( class="ajax"...) colorbox okno, které načte další soubor file.php. V něm změním data pomocí ajaxu, tedy opět něco podobného, abych nemusel přesměrovávat a zapsal při onchange inputu data do DB. Po změně, se provede location.reload(); což provede reload základního souboru a poté potřebuji opět otevřít ten odkaz.

Tedy mu říct, aby po reloadu věděl, že došlo k reloadu, protože při načtení základního souboru se nesmí nic otevřít, až při kliknutí. Pokud došlo k reloadu, tak mu říct, že je potřeba otevřít soubor class=ajax...

Doufám, že jsem to napsal srozumitelně.

 
Nahoru Odpovědět
16.11.2017 16:14
Avatar

Člen
Avatar
Odpovídá na Tomáš Dvořák
:16.11.2017 16:18

Vlastne ... nech už robíš čokoľvek, asi hľadáš toto:

performance.navigation.type // ak nastal reload
  ? opener.$(element).metoda() // vyber element v parentovi a niečo s ním urob
  : null // inak neurob nič, prípadne čokoľvek iné
Editováno 16.11.2017 16:19
 
Nahoru Odpovědět
16.11.2017 16:18
Avatar
Tomáš Dvořák:17.11.2017 14:22

Nakonec jsem to vyřešil takto:

$(document).ready(function() {
     <?php
      if($_SESSION['o'] == "ano"){
          $id = $_SESSION['id'];
          ?>
          $("#o<?php echo $id; ?>").trigger("click");
          <?php
      }
      ?>
  });

asi to není nejčistší... Jak by to vypadlo v případě tvého řešení?

performance.navigation.type // ak nastal reload
  ? opener.$(element).metoda() // vyber element v parentovi a niečo s ním urob
  : null // inak neurob nič, prípadne čokoľvek iné
 
Nahoru Odpovědět
17.11.2017 14:22
Avatar

Člen
Avatar
Odpovídá na Tomáš Dvořák
:17.11.2017 16:26

Úprimne? Hlavne by som to nerobil tak, ako to skúšaš. Veď v tom súbore update.php kde vykonávaš SQL update príkaz, zároveň pošli do prehliadača odpoveď s novým počtom. Veď to AJAX volanie doslova čaká nejakú odpoveď... Takže riešenie je zhruba takéto: v update.php pridaj header 'application/json', po vykonaní update zisti SQL príkazom nový počet, a s echo json_encode() pošli do modálneho okna odpoveď s novým počtom. A tam v callbacku miesto ignorovania odpovede a volania location.reload radšej updatuj DOM model:

function UpdateRecord(id,a,data,name){
  jQuery.ajax({
    type: "POST",
    url: "update.php",
    data: 'id='+id+'&a='+a+'&'+name+'='+data,
    cache: false,
    success: function (response) {
      $('selektor').text(response.count)
      // alert("Záznam byl úspěšně změněn.");
      // location.reload();
    }
  });
}
Editováno 17.11.2017 16:27
 
Nahoru Odpovědět
17.11.2017 16:26
Avatar
Odpovídá na
Tomáš Dvořák:18.11.2017 9:57

Tvoje řešení dává do jisté míry lepší smysl než to moje. Nicméně i na základní stránce se zobrazují údaje, které jsou na stránce file.php. Tedy kompletní reload udělá i to, že se na základní stránce načtou nové údaje.

Každopádně děkuji za komentář.

 
Nahoru Odpovědět
18.11.2017 9:57
Avatar

Člen
Avatar
Odpovídá na Tomáš Dvořák
:18.11.2017 11:56

A načo načítavaš celú stránku kvôli zmene jediného čísla? Na kliknutie kvôli editácii neotváraj nové okno, to je zhovadilosť. Otvor modálne okno/div v tej istej stránke a číslom z AJAX odpovede updatni aj element modálneho okna, aj element vo výpise pod modálnym oknom.

 
Nahoru Odpovědět
18.11.2017 11:56
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.