Php jQuery没有为超过1个用户用文本替换html按钮

Php jQuery没有为超过1个用户用文本替换html按钮,php,jquery,Php,Jquery,我用jQuery和PHP编写了这段代码: <script type="text/javascript"> $(document).ready(function(){ $(".vote<?php echo $pid; ?>").click(function(){ $("span.vote_box<?php echo $pid; ?>").html("you have voted"); }); }); </script> $(文档).r

我用jQuery和PHP编写了这段代码:

<script type="text/javascript">
$(document).ready(function(){
  $(".vote<?php echo $pid; ?>").click(function(){
  $("span.vote_box<?php echo $pid; ?>").html("you have voted");
  });
});
</script>

$(文档).ready(函数(){
$(“.vote”)。单击(函数(){
$(“span.vote_box”).html(“您已投票”);
});
});
但它似乎不起作用。它应该做的是在一个按钮的位置打印“Youhavevote”,用户可以用它来投票一些帖子。它在开始时反应正常,但当我以其他用户身份登录时,按钮保持不变,不会被替换

以下是PHP和HTML部分:

<?php
echo '<span class="vote_box'.$pid.'">';
echo '<input type="button" class="vote'.$pid.'" name="vote" value="vote"/>';
echo '</span>';
?>

注意:我使用AJAX请求将投票插入数据库,因此实际上我只希望jQuery将按钮替换为文本


有什么帮助吗?我是jQuery新手,所以我认为我使用的“html”方法可能是错误的。提前谢谢

我认为您的代码过于复杂了。假设您具有以下html:

<span class="vote_box1">
  <input type="button" class="vote1 vote" name="vote" value="vote"/>
</span>
<span class="vote_box2">
  <input type="button" class="vote2 vote" name="vote" value="vote"/>
</span>
一切都应该运转良好,如图所示。如果仍要使用代码,则必须开始调试

根据我的经验,如果某些东西在jQuery中不起作用,并且以静默方式失败(这意味着没有抛出异常),那么选择器就不对。您可以使用以下代码轻松地对此进行调试:

<script type="text/javascript">
$(document).ready(function(){
  alert('Button: ' +  $(".vote<?php echo $pid; ?>").length);
  $(".vote<?php echo $pid; ?>").click(function(){
    alert('Votebox: ' +  $("span.vote_box<?php echo $pid; ?>").length);
    $("span.vote_box<?php echo $pid; ?>").html("you have voted");
  });
});
</script>

$(文档).ready(函数(){
警报('按钮:'+$(“.vote”).length);
$(“.vote”)。单击(函数(){
警报('Votebox:'+$('span.vote_box”).length);
$(“span.vote_box”).html(“您已投票”);
});
});
这应引起注意:

  • 按钮:1
  • Votebox:1

如果这些值中的on为0,则知道选择器为false。

因为$pid变量是一个“字符串”,所以很可能有非法字符干扰jQuery选择器。这就是为什么它可能对一个用户有效,而对另一个用户无效的原因——在这个场景中,单个单词、字母数字单词可以作为$pid正常工作,但其他变体可能不行

例如:

$pid是“admin”:

<span class="vote_boxadmin">...

$("span.vote_boxadmin").html(...);   //valid selector
。。。
$(“span.vote_boxadmin”).html(…)//有效选择器
$pid是“某个用户”:

<span class="vote_boxsome user">...

$("span.vote_boxsome user").html(...);  //looking for <user> child of span.vote_boxsome
。。。
$(“span.vote_boxsome user”).html(…)//正在寻找span.vote_boxsome的孩子
另一个有趣的秘密是$pid是一个电子邮件地址<代码>是有效的HTML5,但jQuery不会正确选择它


如果看不到实际的JS/HTML输出,就无法确定。这就是我要开始研究的地方。

为什么要使用Javascript来做这件事?最好是让PHP在生成页面时直接输出适当的文本/按钮。@MarcB很抱歉,我想我没有回答这个问题。按钮是供用户投票的,当他投票时,我希望它被替换为文本。你的代码看起来正确,你有一个我们可以查看的实时页面吗?我猜这是
$pid
的问题,但必须查看html和js才能确定。@swatkins不幸地没有。但想象一下,它是一个类似fb的“like”系统,在这个系统中,当用户“喜欢”某样东西时,它会自动被替换为“不喜欢”。每个用户都可以做到哇,好的。您能否至少告诉我们,为span和button生成的类名是什么?您请求帮助,但不愿意提供我们需要的帮助?先生,您刚刚将我升级到jquery noob 1级。谢谢!那真的很管用!
<span class="vote_boxsome user">...

$("span.vote_boxsome user").html(...);  //looking for <user> child of span.vote_boxsome