2013-06-24 9 views
0

Im using jQuery Masonry и еще один javascript для голосования. здесь есть кодЗагрузка страницы Ajax и javascripts

<div id="contain"> 

<?php 

    $result = $mysqli->query("SELECT * FROM posts ORDER BY id DESC LIMIT 0, 20"); 

    while($row = mysqli_fetch_array($result)) 
    { 

     $mes_id = $row['id']; 
     $up = $row['likes']; 



?> 
      <div class="box"> 
      <img src="images/<?php echo $row['image']; ?>"/> 
      <div class='up'> 

<a href="" class="like" id="<?php echo $mes_id;?>" name="up"><?php echo $up; ?></a> 

      </div><!--box--> 
<?php } ?> 
     </div> 

     <nav id="page-nav"> 
      <a href="data_index.php?page=2"></a> 
</nav> 
       <script> 

     $(function() { 
$(".like").click(function() 
{ 
var id = $(this).attr("id"); 
var name = $(this).attr("name"); 
var dataString = 'id='+ id ; 
var parent = $(this); 

if (name=='up') 
{ 
$(this).fadeIn(200).html; 
$.ajax({ 
type: "POST", 
url: "vote.php", 
data: dataString, 
cache: false, 

success: function(html) 
{ 
parent.html(html); 
} 
}); 
} 
return false; 
}); 
}); 
</script> 

<script src="js/jquery.masonry.min.js"></script> 
<script src="js/jquery.infinitescroll.min.js"></script> 

    <script> 
    $(function(){ 
    var $container = $('#contain'); 
    $container.imagesLoaded(function(){ 
    $container.masonry({ 
     itemSelector : '.box', 
     columnWidth : 305 

    }); 
    }); 

    $container.infinitescroll({ 
    navSelector : '#page-nav', // selector for the paged navigation 
    nextSelector : '#page-nav a', // selector for the NEXT link (to page 2) 
    itemSelector : '.box',  // selector for all items you'll retrieve 
    loading: { 
     finishedMsg: 'No more posts to load.', 
     img: 'templates/<?php echo $settings['template'];?>/images/ajax-loader.gif' 
    } 
    }, 
    // trigger Masonry as a callback 
    function(newElements) { 
    var $newElems = $(newElements); 
    $newElems.imagesLoaded(function(){ 
     $container.masonry('appended', $newElems); 
    //Voting 
    $(".like").click(function() 
    { 
    var id = $(this).attr("id"); 
    var name = $(this).attr("name"); 
    var dataString = 'id='+ id ; 
    var parent = $(this); 

    if (name=='up') 
    { 
    $(this).fadeIn(200).html; 
    $.ajax({ 
    type: "POST", 
    url: "vote.php", 
    data: dataString, 
    cache: false, 

    success: function(html) 
    { 
    parent.html(html); 
    } 
    }); 
    } 
    return false; 
    }); 
    //End voting 
    }); 
    }); 
    }); 
</script> 

Как вы можете видеть, я добавил один и тот же javascript два раза. и на 1-й странице при голосовании нажмите его, скрипт будет голосовать 2 раза. но если я удалю 1-й javascript для голосования, он будет работать только на 2-й странице. и если я удалю 2-е голосование javascript будет работать только на 1-й странице. это 2-разовое голосование происходит только при загрузке 2-й страницы. может ли кто-нибудь помочь мне с этой проблемой.

Это голосование Javascript, так что вы можете видеть это легко

<script> 

$(function() { 
    $(".like").click(function() 
    { 
    var id = $(this).attr("id"); 
    var name = $(this).attr("name"); 
    var dataString = 'id='+ id ; 
    var parent = $(this); 

    if (name=='up') 
    { 
    $(this).fadeIn(200).html; 
    $.ajax({ 
    type: "POST", 
    url: "vote.php", 
    data: dataString, 
    cache: false, 

    success: function(html) 
    { 
    parent.html(html); 
    } 
    }); 
    } 
    return false; 
    }); 
    }); 
</script> 
+0

Используйте $ .На для вашего первого блока Javascript и удалить второй блок сценария –

ответ

1

Причина голосования 2 раза вы прикрепление обработчики событий для $(".like").click дважды. Когда щелкнет .like, он выполнит все прикрепленные обработчики событий.

если я удалить 1st JavaScript для голосования он будет работать только в 2-й странице, и если я удалить второй Javascript для голосования будет работать только в 1-й странице. это 2-хкратное голосование происходит только при загрузке 2-й страницы

Это потому, что вы динамически создаете элементы на странице. Я предлагаю использовать делегированные обработчики событий вместо ($.on) .Try:

$("#contain").on("click",".like",function(){ 
}); 

Не забудьте выполнить этот скрипт только один раз

+0

Большое вам спасибо. работает как шарм :) – maxlk

+0

@maxlk: wellcome, рад слышать, что он работает. –

0

попробовать $(".like").on('click',function() вместо $(".like").click(function()

0

<script> 
     $(function(){ 
      var $container = $('#contain'); 
      $container.imagesLoaded(function(){ 
       $container.masonry({ 
        itemSelector : '.box', 
        columnWidth : 305 

       }); 
      }); 

      $container.infinitescroll({ 
       navSelector : '#page-nav', // selector for the paged navigation 
       nextSelector : '#page-nav a', // selector for the NEXT link (to page 2) 
       itemSelector : '.box',  // selector for all items you'll retrieve 
       loading: { 
        finishedMsg: 'No more posts to load.', 
        img: 'templates/<?php echo $settings['template'];?>/images/ajax-loader.gif' 
       } 
      }, 
      // trigger Masonry as a callback 
      function(newElements) { 
       var $newElems = $(newElements); 
       $newElems.imagesLoaded(function(){ 
        $container.masonry('appended', $newElems); 
       //Voting 
       $(".like").click(function() 
      { 
     var id = $(this).attr("id"); 
      var name = $(this).attr("name"); 
      var dataString = 'id='+ id ; 
     var parent = $(this); 

     if (name=='up') 
     { 
      $(this).fadeIn(200).html; 
     $.ajax({ 
      type: "POST", 
     url: "vote.php", 
      data: dataString, 
      cache: false, 

     success: function(html) 
     { 
     parent.html(html); 
     } 
     }); 
     } 
     return false; 
     }); 
      //End voting 
       }); 
      }); 
     }); 
     </script> 

       <div id="contain"> 

      <?php 

     $result = $mysqli->query("SELECT * FROM posts ORDER BY id DESC LIMIT 0, 20"); 

     while($row = mysqli_fetch_array($result)) 
     { 

     $mes_id = $row['id']; 
     $up = $row['likes']; 



      ?> 
     <div class="box"> 
     <img src="images/<?php echo $row['image']; ?>"/> 
     <div class='up'> 

      <a href="" class="like" id="<?php echo $mes_id;?>" name="up"><?php echo $up; ?></a> 

     </div><!--box--> 
     <?php } ?> 
     </div> 

     <nav id="page-nav"> 
     <a href="data_index.php?page=2"></a> 
     </nav>