7

重複の可能性:
変数をphpからjavascriptに渡す

リストを動的に生成しています。各行をマウスオーバーでホバーして、リンクをクリックできるようにしたい。リンクが行のコンテンツのIDを渡すようにします。

基本的:

foreach ($courses as $cid=>cinfo){ 
  $univ = $cinfo['univ'];
  $desc = $cinfo['desc'];
  $size = $cinfo['size'];
  $start = $cinfo['start'];
  print "<div class='rc_desc' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
        "<span>Number of students</span>: $size<br/>".
        "<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".
}

<script>
    $(function ()
    {
      $('#rc_desc$cid').hover(function ()
      {
        $(this).toggleClass('.tr');
      });
      $('#rc_desc$cid').click(function ()
      {
        $(location).attr('href','student.php?$cid');
      });
    });
  </script>

問題はjs/jqueryにあります。$cid を取得して、クリック時に Student.php ページに渡すことができるようにしたいと考えています。上記の php コードは機能しますが、もちろん js は機能しません。クライアント側とサーバー側の言語の基本を知っています。この質問は講義を保証するものではありません。これを正確に行うことはできないことはわかっていますが、最終的にはそれを実現したいと考えています。これを簡単に達成する方法について何か考えはありますか? よろしくお願いします!

4

6 に答える 6

9

はい、PHP コードにセクションを含める<script>と、次のようなことができます。

<script>
    var foo = <?php echo $foo; ?>;
</script>

あなたの場合、次のコード構造を調べます。

<script>
    $(function () {
        $('#rc_desc<?php echo $cid ?>').hover(function () {
            $(this).toggleClass('.tr');
        });
        $('#rc_desc<?php echo $cid ?>').click(function () {
            $(location).attr('href', 'student.php?<?php echo $cid ?>');
        });
    });
</script>

これが可能な理由は、Javascript はクライアント側で実行されますが、ページに表示される前にまずサーバー側で処理されるためです。したがって、必要なすべてのインスタンスが$cid、含めたものに置き換えられます。

楽しんで頑張ってください!

編集

<script>
    $(function () {
        $('.rc_desc').hover(function () {
            $(this).toggleClass('.tr ');
        });
        $('.rc_desc').click(function () {
            $(location).attr('href', 'student.php?' + $(this).attr('id').split('rc_desc')[1]);
        });
    });
</script>
于 2012-07-13T16:40:28.200 に答える
5

あなたはこのようにすることができます:

    $(location).attr('href','<?php echo $cid ?>');

JavaScript コードは、それが php からのものであることを認識せず、定数 (リテラル) として表示されます。

于 2012-07-13T16:40:21.130 に答える
2

はい、可能です。あなたがしなければならないのは<?PHP echo $cid; ?>、必要な場所に置くだけです

<script>
$(function ()
{
  $('#rc_desc<?PHP echo $cid; ?>').hover(function ()
  {
    $(this).toggleClass('.tr');
  });
  $('#rc_desc$cid').click(function ()
  {
    $(location).attr('href','student.php?<?PHP echo $cid; ?>');
  });
});

これが可能なのは、スクリプトがページに挿入されるまでに、cid がサーバー上の文字列にすでに置き換えられているためです。PHP はサーバー駆動であるため、html/script を吐き出す前は、自分で入れたようになります。

于 2012-07-13T16:40:21.807 に答える
1

このコードを試してください

foreach ($courses as $cid=>cinfo){ 
  $univ = $cinfo['univ'];
  $desc = $cinfo['desc'];
  $size = $cinfo['size'];
  $start = $cinfo['start'];
  print "<div class='rc_desc' data-id='$cid' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
        "<span>Number of students</span>: $size<br/>".
        "<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".
}

<script>
    $(function ()
    {
      $('#rc_desc$cid').hover(function ()
      {
        $(this).toggleClass('.tr');
      });
      $('.rc_desc').click(function ()
      {
        $(location).attr('href','student.php?' + $(this).attr("data-id"));

       // if you want to redirect the page do this
       // window.location.href = 'student.php?' + $(this).attr("data-id");
      });
    });
  </script>
于 2012-07-13T16:50:52.010 に答える
1

私はあなたがブロックすべきだと思います:

<script>
    $(function ()
    {
    <?php foreach($courses as $cid=>cinfo) : ?>

      $('#rc_desc<?php echo $cid; ?>').hover(function ()
      {
        $(this).toggleClass('.tr');
      });
      $('#rc_desc<?php echo $cid; ?>').click(function ()
      {
        $(location).attr('href','student.php?<?php echo $cid; ?>');
      }); 
      ";?>
      <?php endforeach; ?>
    });
  </script>

アップデート

しかし、実際にこれを行う必要はありません。

"<div class='rc_desc' data-id='$cid' id='rc_desc$cid'>"."$desc<br/>"."<b>$univ</b><br/>".
"<span>Number of students</span>: $size<br/>".
"<span>Started at</span>: ".date('F d, Y',strtotime($start))."<br/>".

これを試すことができます

$(function (){
      $('.rc_desc').hover(function ()
      {
        $(this).toggleClass('.tr');
      });
      $('.rc_desc').click(function ()
      {
        attrId = $(this).attr("data-id");
        $(location).attr('href','student.php?'+id);
      });
});
于 2012-07-13T16:44:27.673 に答える
1

PHP と JavaScript を実際に通信する方法はほとんどありません。ただし、属性内に ID を設定するのが最も簡単な方法です。新しい HTML5 データ属性は完璧です。

たとえば、アンカータグに

<span data-id="22">some event</a>

その後:

$(this).attr('href','student.php?'+$(this).attr('data-id'));

または単に使用する

<?php echo $id; ?>

外部JSファイルでない場合

于 2012-07-13T16:42:40.553 に答える