Załadowanie w pętli php (blade wido) n-ty raz funkcji js

0

Mam taki problem bo zamierzam wywołać funkcje java script kilka razy po wczytaniu strony ale ma być to funkcja powtórzona przez kod PHP i teraz problem w tym, że ona się wywołuje tylko raz.

@foreach (\App\Models\Action::selectAction(Auth::User()->id)  as $list)
                                                 <div class="rowPercent">
                                                     @if ($val = \App\Models\Moods_action::selectValueActionForMood($idMood,Auth::User()->id,$list->id) )
                                                     
                                                        
                                                        
                                                        <script>
                                                                jQuery(document).load(selectedActionMainSetValue({{$list->id}},{{$loop->index}},{{$val->percent_executing}},{{$idMood}}));
                                                          


                                                       </script>
                                                        
                                                        
                                                      
                                                        
                                                         
                                                     @endif

funkcja js

function selectedActionMainSetValue(id,index,value,idMood) {

        $("#divAction_" + id + "_" + idMood).removeClass("actionMain" + idMood).addClass("actionMainselected");
        $("#divActionPercent_" + id + "_" + idMood).removeClass("hiddenPercentExecuting").addClass('active');
        //$("#idAction").eq(index).val(id);
        //eval(arrayActionMulti + idMood)
        //arrayActionMulti["id"].push(id);
        //arrayActionMulti["idMood"].push(idMood);
        arrayActionMulti.push([id,idMood]);
        $("#percentExe_" + index).val(value);
 
}
1

@tomixtomi0001: A czemu w ten sposób wywołujesz ten skrypt jQuery? Nie prościej wyrenderować najpierw stronę a dopiero później puścić skrytp? Coś w konsoli Ci wyrzuca?

1
tomixtomi0001 napisał(a):

Mam taki problem bo zamierzam wywołać funkcje java script kilka razy po wczytaniu strony ale ma być to funkcja powtórzona przez kod PHP i teraz problem w tym, że ona się wywołuje tylko raz.

Powiedz od razu jaki problem chcesz rozwiązać, bo to co pokazałeś nie ma sensu.

0

@TomRiddle: Chcę do funkcji js załadować tablicę wielowymiarową

{{$list->id}},{{$loop->index}},{{$val->percent_executing}},{{$idMood}}

i ta funkcja js uaktywni niektóre divy (html) i wprowadzi wartości myślałem na tym, żeby to w petli załadować pojedynczą funkcją ale chyba będą musiał wprowadzić jakiś json do funkcji js.

2
tomixtomi0001 napisał(a):

@TomRiddle: Chcę do funkcji js załadować tablicę wielowymiarową

{{$list->id}},{{$loop->index}},{{$val->percent_executing}},{{$idMood}}

i ta funkcja js uaktywni niektóre divy (html) i wprowadzi wartości myślałem na tym, żeby to w petli załadować pojedynczą funkcją ale chyba będą musiał wprowadzić jakiś json do funkcji js.

Albo wóz, albo przewóz.

  • Albo się decydujesz żeby wszystko renderować w PHP; i wtedy w ogóle nie używasz JS i sprawa jest prosta.
  • Albo się decydujesz że front ma update'ować widok (nie wiem czy to dobra decyzja, bo mało szczegółów podałeś); ale jeśli decydujesz się na update widoku na froncie, to już całość robisz na froncie.

Nie robi się tak, że wsadzasz snippeciki JS'a do PHP, żeby one update'owały widok.

0
tomixtomi0001 napisał(a):
TomRiddle napisał(a):

Albo wóz, albo przewóz.

  • Albo się decydujesz żeby wszystko renderować w PHP; i wtedy w ogóle nie używasz JS i sprawa jest prosta.
  • Albo się decydujesz że front ma update'ować widok (nie wiem czy to dobra decyzja, bo mało szczegółów podałeś); ale jeśli decydujesz się na update widoku na froncie, to już całość robisz na froncie.

Nie robi się tak, że wsadzasz snippeciki JS'a do PHP, żeby one update'owały widok.

Tylko, że ja muszę pobrać dane z bazy MySQL i na podstawie tych danych wprowadzić dane do diva i go uaktywnić.

Noi co stoi na przeszkodzie żeby użyć tych danych z MySQL'a w samym JS? :)

0

@TomRiddle: No włASNIE UŻYWAM przez wywołanie zdarzenia onload

0

A dlaczego nie załadujesz danych do Diva, ktory jest niewidoczny? I wtedy JS moze sobie manipulowac tymi danymi dowolnie?

0

Może dam kod.
Pobueranie są dane z bazy danych

@foreach (\App\Models\Action::selectAction(Auth::User()->id)  as $list)
                                                 <div class="rowPercent">
                                                     @if ($val = \App\Models\Moods_action::selectValueActionForMood($idMood,Auth::User()->id,$list->id) )
                                                     
                                                        
                                                        
                                                        <script>
                                                                window.onload = selectedActionMainSetValue({{$list->id}},{{$loop->index}},{{$val->percent_executing}},{{$idMood}});
                                                                


                                                       </script>
                                                        
                                                        
                                                      
                                                        
                                                         
                                                     @endif
                                                   <div class='actionMain actionMain{{$idMood}}'  id='divAction_{{$list->id}}_{{$idMood}}' onclick='selectedActionMainValue({{$list->id}},{{$loop->index}},{{$idMood}})'>{{$list->name}}</div>
                                                    <div class="hiddenPercentExecuting centerPercent" id='divActionPercent_{{$list->id}}_{{$idMood}}'>
                                                        <div style="display: inline-block; width: 40%;"><input type="number" class="percentExecuting form-control form-control-lg " title="procent wykonania" placeholder="procent wyk" id="percentExe_{{$loop->index}}" name="percentExe{{$idMood}}[]" min="1" max="100"></div>
                                                        <input type="hidden"  id='idAction' name="idActionss[]" value='NULL'>
                                                    </div>
                                                 </div>
                                                 @endforeach
                                            </div>

                                            <div id="formResult"></div>
                                                dddsff
                                            </div>

I jest wywoływana ta funkcja

 window.onload = selectedActionMainSetValue({{$list->id}},{{$loop->index}},{{$val->percent_executing}},{{$idMood}});

Kod tej funkcji.

function selectedActionMainSetValue(id,index,value,idMood) {
        alert('ddd');
        $("#divAction_" + id + "_" + idMood).removeClass("actionMain" + idMood).addClass("actionMainselected");
        $("#divActionPercent_" + id + "_" + idMood).removeClass("hiddenPercentExecuting").addClass('active');
        //$("#idAction").eq(index).val(id);
        //eval(arrayActionMulti + idMood)
        //arrayActionMulti["id"].push(id);
        //arrayActionMulti["idMood"].push(idMood);
        arrayActionMulti.push([id,idMood]);
        $("#percentExe_" + index).val(value);
 
}
2

Słabe rozwiązanie.

Jeśli już koniecznie chcesz to renderować w widoku, NIE WIEM CZEMU....

Pragnę tylko zaznaczyć, że to raczej slabe. Lapiej albo wrenderować od razu w HTML; albo zrobić to na froncie całkiem, np strzelając Ajaxem.

Ale to mogłoby tak zostać zrobione tak:

<div>
  My content
</div>

<script type="application/json" id="my-data">
  <?php echo json_encode([
    'mood'   => 'my mood',
    'userId' => 'my user auth',
    'listId' => 'my list id'
  ]); ?>
</script>

<script>
    const myData = JSON.parse(document.getElementById("my-data").innerText);

    const mood = myData.mood;
    const userId = myData.userId;
    const listId = myData.listId;

    console.log(mood, userId, listId);
</script>

1 użytkowników online, w tym zalogowanych: 0, gości: 1