2013-05-31 5 views
5

Pozwól mi wyjaśnić szczegółowo pytanie. Używam PHP i Smarty. Otrzymuję wartość op=back z ciągu zapytania. Ale nie stanie się to za każdym razem, gdy uruchamiany jest plik PHP, więc kiedy op=back jest wartością, którą muszę wywołać zdarzenie click na określonym łączu. Moje PHP kodu plik fragment znajduje się poniżej:Jak wykonać kod jQuery w zależności od wartości otrzymanej za pośrednictwem zapytania?

<?php 
    include_once("includes/teacher-application-header.php"); 

    prepare_request(); 
    $request = empty($_GET) ? $_POST : $_GET ; 
    $op = $request['op']; 

    $objTeachClassSub = new TeacherClassesSubjects(); 

    global $teacher_profile_from_session; 

    $teacher_id = $teacher_profile_from_session['TEACHER_ID']; 

    $teacher_classes_subjects = $objTeachClassSub->GetClassSubjectMappingsbyTeacherId($teacher_id); 

$smarty->assign('teacher_classes_subjects', $teacher_classes_subjects); 

    $smarty->assign("op",$op);   
    $smarty->display("teacher-details.tpl");  
?> 

teraz fragment kodu z smarty pliku jest jak poniżej:

{literal} 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
<script type="text/javascript"> 
</script> 
{/literal} 
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" > 
    <tr> 
     <td align="left" valign="top"> 
      <h3>Teacher Details</h3> 
     </td> 
    </tr> 
</table> 
<table width="99%" border="0" cellpadding="0" cellspacing="0" class="manage_box" > 
    <tr> 
     <td> 
      <table cellpadding="0" cellspacing="0" border="1" width="100%"> 
     <tr> 
      <td width="25%"> 
      {if $teacher_classes_subjects} 
       {foreach from=$teacher_classes_subjects item="classes_subjects"} 
       <b><a href="#" id="{$classes_subjects.class_id}">{$classes_subjects.class_name}</a></b><br /> 
       {if $classes_subjects.class_subjects} 
       <div id="class_subjects_{$classes_subjects.class_id}"> 
        {foreach from=$classes_subjects.class_subjects item="class_subjects"} 
         <i><a id ="back" href="chapter_details.php?class_id={$classes_subjects.class_id}&cs_map_id={$class_subjects.cs_map_id}">{$class_subjects.subject_name}</a></i><br /> 
        {/foreach} 
       </div> 
       <br /> 
       {/if} 
       {/foreach} 
      {/if} 
      </td> 
      <td width="75%"> 
      {if $chapter_details} 
      <ul> 
      {foreach from=$chapter_details item=chapter} 
      <li><a href="chapter_details.php?op=get_chapter_theory&chapter_id={$chapter.chapter_id}&class_id={$class_id}&cs_map_id={$cs_map_id}&chapter_title={$chapter.chapter_title}">{$chapter.chapter_title}</a></li> 
      {/foreach} 
      </ul> 
      {/if} 

      {include file=$file_to_show} 
      </td> aly what is 
     </tr> 
     </table> 
     </td> 
    <td align="left" id="subject_container" valign="top"> 
    </td> 
    <td align="left" id="chapter_container" valign="top"> 
    </td> 
    </tr> 
</table> 

Teraz to, co chcę osiągnąć jest napisanie kodu jQuery w wyżej mądry plik szablonu, który zostanie wykonany, jeśli wartość op powraca (tj. {op==back}). Właściwie czego oczekuje się, gdy zdarzenie op=back kliknięcie powinno się ognia na poniższym linku:

<a id ="back" href="chapter_details.php?class_id={$classes_subjects.class_id}&cs_map_id={$class_subjects.cs_map_id}">{$class_subjects.subject_name}</a> 

Czy ktoś może mi wyjaśnić, jak osiągnąć tę funkcjonalność? Z góry dziękuję.

Odpowiedz

1

Jeśli chcesz, aby przejść do konkretnej strony, gdy op == wstecz należy po prostu przekierować go w sobie kod PHP

if(isset($_GET['op']) && $_GET['op'] == 'back'){ 
     header('location: yourpath/youurl.php'); 
} 

Pamiętaj, aby to zrobić przed powtarzając wszystko.

Jeśli chcesz wywołać kliknięcie, gdy ta opcja jest po prostu wydrukować skrypt warunkowo z dokumentem gotowym i $ („# back”) spustu („kliknięcie”), jeśli używasz jQuery.

//$go = (isset($_GET['op']) && $_GET['op'] == 'back'); 
{if $go} 
<script> 
    $(document).ready(function(){ 
     $('#back').trigger('click'); 
    }); 
</script> 
{/if} 

EDIT

Kliknięcie tego linku spowoduje, że przeglądarka drogę do innej strony, chyba że użyłeś czegoś podobnego e.preventDefault(). Jeśli nie, zaleciłbym skorzystanie z pierwszego zaproponowanego przeze mnie rozwiązania. Jeśli potrzebujesz prośby, aby dostać się do klienta, to przekierowanie, z jakiegokolwiek powodu, lub zrobisz coś innego, skorzystam z drugiego rozwiązania.

Nadzieja pomaga

+0

Chcę uruchomić zdarzenie kliknięcia tylko na łączu, nie chcę przekierowywać do żadnego adresu URL. Kiedy klikam na link, po kliknięciu linku przechodzi kilka wartości w postaci ciągu zapytania.Więc twoje rozwiązanie wydaje się nieco nieodpowiednie dla tego problemu. Czy masz lepszy pomysł poza tym? – PHPLover

0

Chyba to powinno działać, jeśli umieścić w nagłówku

<?php 
    if($_GET['op'] == "back"){ 
     ?> 
    <script> 
     $(document).ready(function(){ 
      $('#back').trigger('click'); 
     }); 
    </script> 
     <?php 
     } 
?> 

ale jeśli trzeba to zrobić po strona jest ładowana całkowicie można ustawić licznik w JQuery i wykonać to Skrypt Jquery po może być 1 sekunda

+0

Lub Utwórz funkcję i wywołaj tę funkcję przy ładowaniu ciałem – Kam

1

Domyślam się, że najlepszą opcją jest ustawienie go na ukryte wejście html w szablonie, aw skrypcie java w dokumencie gotowe sprawdzanie wartości tego html input, a następnie zmiana href atrybut twojego linku

0

Możesz utworzyć funkcję w czystym JS, aby pobrać wartość ciągu zapytania parametrów, a następnie użyć jej do określenia, czy powinieneś zwolnić kliknięcie linku.

coś takiego:

function getQueryStringParameter(name) { 

    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); 
    return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

var n = getQueryStringParameter('op'); 
if(n == 'back'){ 
    $('#back').trigger('click'); 
} 

nadzieję, że to pomaga.

Powiązane problemy