如何在 AJAX 之后使 innerHTML 中的 javascript 工作

How to make javascript in innerHTML work after an AJAX

我正在制作一个投票系统。用户单击这些按钮(div)后,将调用 ajax 将数据传递到另一个页面,执行 SQL 插入会话 ID、投票值、投票 ID 并显示新的总数
这是我的ajax

$('.like').on('click', function(){
    var voteclass=2;
    var vote_id=$(this).parent().attr("id");
    var poststr="voteclass="+voteclass+"&voteteacher="+vote_teacher;
    $.ajax({
    url:"insert.php",
    cache:0,
    data:poststr,
    success:function(result){
    $('#'vote_id).html(result);}  });   });

在ajax后,insert.php做SQL,结果显示与投票div内容相同fontpage 但具有新的总值。
我的问题是如果不刷新整个页面我就不能再次投票。这是否意味着 innerHTML 无法在外部(我不知道是什么术语)页面的 head 元素内加载脚本?我该如何解决?

需要使用on()函数,更改:

$('.like').bind('click', function(){

$('body').on('click','.like', function(){

当然,我假设您向我们展示的脚本片段包含在:

$(document).ready(function(){
   ...
});

也改变这个:

var vote_id=$(this).parent().attr("class");

至:

var vote_id=$(this).parent().attr("id");

试试这个..

 $('.like').on('click', function(){
        var voteclass=2;
        var vote_id=$(this).parent().attr("class");
        var poststr="voteclass="+voteclass+"&voteteacher="+vote_teacher;
        $.ajax({
            url:"insert.php",
            cache:0,
            data:poststr,
            success:function(result){
                $('#vote_id').html(result);
            }
        });  
 });

我想我只需要添加一个答案:Working Fiddle

Javascript:

我将整个逻辑包装在 document.ready 中以确保 DOM 已完全加载,我假设您也这样做了。

我还使用 'on' 而不是 'bind',因为这是 jQuery 他们当前库的首选方法。

我的 ajax 调用是对 jsFiddle 的模拟 ajax 调用,但您可以将 url 替换为您的 index.php.

成功时我使用了 $('.'+vote_id) 因为你得到了父级的 'class',所以你需要一个 '.'而不是 jquery 选择器中的“#”。如果我是你,我会将变量 'vote_id' 更改为 'parentVoteClass'.

最后,我使用了 'append',因为您不想丢失父标签中现有的 html。这会将结果中的值添加到父元素中现有 html 的末尾。如果您使用 prepend(result) 它将把它放在第一位并使用 .html(result) 将替换它。

 $(document).ready(function() {
        $('.like').on('click', function(){
            var vote_teacher = 1;
        var voteclass = 2;
        var vote_id = $(this).parent().attr("class");
        var poststr="voteclass="+voteclass+"&voteteacher="+vote_teacher;
        $.ajax({
            type: "POST",
            url: "/echo/json/",
            data: poststr,
            cache: false,
            success: function(result) {
                var someDatafromResult = "my stuff";
                $('.'+vote_id).append(someDatafromResult);
            }
        });
    });
});

HTML:

<div id="parent" class="parentClass">
<a href="#" class="like">Vote!</a>    
</div>

更新:

我修改了你的fiddle:Modified Fiddle

主要变化在这里:

function main(){
$('#something').on('click','.agree', function(){...code hidden...}

这允许您在父元素上绑定事件,您也可以使用 document 而不是“#something”。现在,如果你 html 和 'agree' class 被替换或被淘汰,偶数仍然存在。

我在这里伪造成功phpreturn:

success:function(result){            
           $('#'+des_id+'').html('<li>text    <span class="votes_type ">    <a href="#!" class="agree">'+voteNumber+'<img src="png"></a>    <a href="#!" class="disagree">disagreenumber<img src="png"></a> </span>    </li>   ');
           ;}

我使用一些内联字符串 html 来伪造 html return 结果,然后使用变量 'voteNumber',每次点击它都会增加,以表明它确实如此确实改变并继续工作。