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 个输入框,一个带有带有增量变量的帖子 id,另一个用于存储带有增量变量的上述输入框的值。我正在制作产品概述,因此我需要能够访问正确的帖子并使用 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

可能不是您问题的答案,但首先您应该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 回答
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 回答