如何根据通过查询字符串接收到的值执行jQuery代码?

5
让我详细解释一下问题。我正在使用PHP和Smarty。我从查询字符串中获取一个值op=back。但是并不是每次运行PHP文件时都会出现这种情况,所以当op=back是这个值时,我必须在特定连接上触发点击事件。我的PHP文件代码片段如下:
<?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");      
?>

现在smarty文件中的代码片段如下:
{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>

现在我想要实现的是,在上述智能模板文件中编写jQuery代码,如果op值为back(即{op==back}),则执行该代码。 实际期望的是当op=back的点击事件应该在以下链接上触发:

<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>

有人可以向我解释如何实现这个功能吗?谢谢提前。

4个回答

1
如果您想在op==back时转到特定站点,则应在php代码中进行重定向。
 if(isset($_GET['op']) && $_GET['op'] == 'back'){
      header('location: yourpath/youurl.php');
 }

在输出任何内容之前,请务必执行此操作。

如果您想在设置此选项时触发点击,请有条件地使用文档准备好和$('#back').trigger('click')打印脚本,如果您正在使用jQuery:

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

编辑

点击此链接将使浏览器转到另一个页面,除非您使用了类似e.preventDefault()的内容。如果没有,我建议使用我提出的第一种解决方案。 如果您需要请求到客户端,并且为任何原因进行重定向或执行其他操作,则应使用第二种解决方案。

希望能帮到您


我想在一个链接上触发点击事件,但不想重定向到任何URL。当我点击链接时,一些值以查询字符串的形式传递。因此,你的解决方案似乎对这个问题不太适用。除此之外,你有更好的想法吗? - PHPLover

1
我想你最好的选择是将其设置为模板中的隐藏html输入,并在文档准备就绪时检查该html输入的值,然后更改您链接的href属性。

0

如果您将其放在头部,我想这应该可以工作。

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

但是如果您需要在页面完全加载后执行此操作,您可以在JQuery中设置计时器,并在1秒后执行此Jquery脚本。


或者创建一个函数,并在页面加载时调用该函数。 - Kam

0
你可以使用纯JS创建一个函数来检索参数的查询字符串值,然后使用它来决定是否触发链接点击。类似这样:
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');
}

希望能有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接