1

これで非表示の入力ボックスから値を取得できるかどうかについて質問があります。

<?php  $i = 0; $j = 1;?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php get_template_part( 'content', get_post_format() ); 
        $postid[$i] = get_the_ID();
        echo "<input type='hidden' value='".$postid[$i]."' id='hiddenpostitle".$j."' name='hiddenpostitle'/> ";
        echo "<input type='hidden' value='".$j."' id='hiddenpostnumfield".$j."'/> ";            
    ?>
    <?php 
        $i++;
        $j++;
    ?>
<?php endwhile; endif; ?>

つまり、これはすべての投稿を描画し、Wordpressに従ってフォーマットすることです。各投稿がループしている間、それぞれに2つの入力ボックスを作成します。1つは投稿IDに増分変数を使用し、もう1つは上記の入力ボックスの値を増分変数に格納します。製品の概要を作成しているので、適切な投稿にアクセスして、JSONを使用して送信できるようにする必要があります。

私が立ち往生している部分は、クリックされた正しい投稿タイプを取得することです。

これまでの私のJQueryコードは次のとおりです。

<script type="text/javascript">
$(function () {
    $('.item-post a').each(function (i) {
        $(this).on("click", function (e) {
            alert(i);

            var num = $('#hiddenpostitle').val();
            alert(num);

            var prodname = $('#hiddenpostitle' + num /* + (i+1)*/).val();

            $.post('overviewcheck-515adfzx8522', {'ProdName': prodname}, function (response) { }, 'json');
        });
    });
    $('.item-post a').colorbox({ opacity: 0.3, href: "../overviewa512454dzdtfa" });
});
</script>   

クリックされた関連製品を取得していないため、最初の投稿が常に表示されるため、これは正しく機能していません。

例:3をクリックし、1が最初であるとすると、2、3、または4をクリックしても、常に1が得られます。

私は本当に立ち往生していて、これについて助けが必要です。進め方がわからない。

メリークリスマス!

アップデート:

使用されている新しいコード

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="post-id-holder">
      <?php get_template_part('content',get_post_format()); ?>
      <div class="post-id-data" post-id="<?php echo get_the_ID(); ?>" post-title="something"></div>
      </div>                        

    <?php endwhile; endif; ?>
<script type="text/javascript">
(document).ready(function() {
   $('.item-post a').click(function(){
    // find the article for the post
    var article  = $(this).parentsUntil('article').parent();
    var post_id = article.attr("id");
    var post_title $('.entry-title a',article).text();
    alert(post_id);
    alert(post_title);


    $.post('overviewcheck-515adfzx8522', 
    { 
    'ProdName': prodname

    },
    function(response) {
    },
    'json'
    );


   $('.item-post a').colorbox({opacity:0.3, href:"../overviewa512454dzdtfa"});
   });
});

答え:

ありがとうマット!:)

これがコードなので、これに遭遇した場合はそれを使用できます!

Wordpressのクエリセクション:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
 <div class="post-id-holder">
 <?php get_template_part('content',get_post_format()); ?>
  <div class="post-id-data" post-id="<?php echo get_the_ID(); ?>" post-title="something">      </div> 
 </div>                     

<?php endwhile; endif; ?>

JQuery側:

<script type="text/javascript">
$(document).ready(function() {
 $('.item-post a').click(function(){
    // find the article for the post
        var article  = $(this).parentsUntil('article').parent();
    var post_id = article.attr("id");
    var post_title = $('.entry-title a',article).text();



        $.post('overviewcheck-515adfzx8522', 
                                        { 
        'ProdName': post_title

                                        },
         function(response) {
                                        },
         'json'
        );



       });
    $('.item-post a').colorbox({opacity:0.3, href:"../overviewa512454dzdtfa"});
});

</script>

もう一度みんなに感謝します!メリークリスマス!

4

2 に答える 2

1

フォームを作成していない場合は、実際には入力タグを使用する必要はありません。たまたまコードがフォームブロック内で実行された場合、問題が発生するだけです。javascript時にpost-idを検出したいだけの場合は、それをdivまたはspanタグのプロパティに詰め込むことをお勧めします。

<?php while(have_posts()): ?>
<?php the_post(); ?>
<div class="post-id-holder">
    <?php get_template_part('content',get_post_format()); ?>
    <div class="post-id-data" post-id="<?php echo get_the_ID(); ?>" post-title="something"></div>
</div>
<?php endwhile; ?>

後で、javascript自体を介してアクセスできます。

<script type="text/javascript">
$(document).ready(function() {
   $('.item-post a').click(function(){
      // where are we? we are at any link inside the post, and that's no good.

      // find the holder parent
      var holder = $(this).parentsUntil('.post-id-holder');
      var data = $(".post-id-data",holder);

      var post_id = data.attr("post-id");
      var post_title = data.attr("post-title");
   });
});
</script>

編集:

HTMLを確認した後、テンプレートに何も追加しなくても、投稿IDとタイトルを取得できると思います。

<script type="text/javascript">
$(document).ready(function() {
   $('.item-post a').click(function(){
      // find the article for the post
      var article  = $(this).parentsUntil('article').parent();
      var post_id = article.attr("id");
      var post_title $('.entry-title a',article).text();
      alert(post_id);
      alert(post_title);
   });
});
</script>
于 2012-12-21T01:37:08.313 に答える
1

あなたの質問に対する答えではないかもしれませんが、まず最初にeachここからその部分を削除する必要があります

$('.item-post a').each(function (i) {
    $(this).on("click", function (e){
        //...
    });
});

そのはず

$('.item-post a').on("click", function (e){
    //...
});

あなたはそれぞれの外であなたのイベントを登録するべきです、ループする必要はありません、jQueryそれをします。また、次のコードを使用しています

$.post('overviewcheck-515adfzx8522', {'ProdName': prodname}, function (response) { 

}, 'json');

この場合、最初の引数は有効に見えずurl、コールバック関数は何も実行していないため、これらを修正する必要があります。

于 2012-12-21T01:02:36.367 に答える