$. Sonrası () jQuery çalışmıyor

2 Cevap php

Ben bir değerlendirme sistemi yapıyorum ve benim index.php sayfasında aşağıdaki jQuery kodu var:

<script type="text/javascript">

$(document).ready(function() {

    $("[id^=rating_]").hover(function() {

    	var rid = $(this).attr("id").split("_")[1];
    	$("#rating_"+rid).children("[class^=star_]").children('img').hover(function() {

    		$("#rating_"+rid).children("[class^=star_]").children('img').removeClass("hover");

    		/* The hovered item number */
    		var hovered = $(this).parent().attr("class").split("_")[1];
    		var hovered2 = $(this).parent().attr("class").split("_")[1];

    		while(hovered > 0) {
    			$("#rating_"+rid).children(".star_"+hovered).children('img').addClass("hover");
    			hovered--;
    		}

    		$("#rating_"+rid).children("[class^=star_]").click(function() {
    			var current_star = $(this).attr("class").split("_")[1];

    			$.post("send.php", {rating: current_star, id: rid});
    		});
    	});

    });




});

</script>

Temelde bir hover efekti gidecekseniz ve daha sonra yıldıza tıkladığınızda, bu derece bilgi ile, send.php için bir post isteği göndermek olacak tıkladım ve elemanın kimliği. Bu komut Aşağıda bu gibi görünüyor bazı PHP var:

<?php


$query = mysql_query("SELECT * FROM test");

while($row = mysql_fetch_array($query)) {
    $rating = (int)$row[rating];
    ?>
    <div id="rating_<?php echo $row[id]; ?>">
    <span class="star_1"><img src="star_blank.png" alt="" <?php if($rating > 0) { echo"class='hover'"; } ?> /></span>
    <span class="star_2"><img src="star_blank.png" alt="" <?php if($rating > 1.5) { echo"class='hover'"; } ?> /></span>
    <span class="star_3"><img src="star_blank.png" alt="" <?php if($rating > 2.5) { echo"class='hover'"; } ?> /></span>
    <span class="star_4"><img src="star_blank.png" alt="" <?php if($rating > 3.5) { echo"class='hover'"; } ?> /></span>
    <span class="star_5"><img src="star_blank.png" alt="" <?php if($rating > 4.5) { echo"class='hover'"; } ?> /></span>
    <div class="clearleft">&nbsp;</div>
    </div>
    <br />
    <?php	
}

?>

Ve sonra tabii ki güzel görünmesi için bazı CSS var.

Send.php dosyası gibi görünüyor:

<?php

mysql_connect("localhost", "admin", "") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());


$rating = (int)$_POST['rating'];
$id = (int)$_POST['rid'];



$query = mysql_query("SELECT * FROM test WHERE id = '".$id."'") or die(mysql_error());

while($row = mysql_fetch_array($query)) {

    if($rating > 5 || $rating < 1) {
    	echo"Rating can't be below 1 or more than 5";
    }
    else {

    	$total_ratings = $row['total_ratings'];
    	$total_rating = $row['total_rating'];
    	$current_rating = $row['rating'];

    	$new_total_rating = $total_rating + $rating;
    	$new_total_ratings = $total_ratings + 1;
    	$new_rating = $new_total_rating / $new_total_ratings;


    	// Lets run the queries. 

    	mysql_query("UPDATE test SET total_rating = '".$new_total_rating."' WHERE id = '".$id."'") or die(mysql_error());
    	mysql_query("UPDATE test SET rating = '".$new_rating."' WHERE id = '".$id."'") or die(mysql_error());
    	mysql_query("UPDATE test SET total_ratings = '".$new_total_ratings."' WHERE id = '".$id."'") or die(mysql_error());
    }

}




?>

There are 3 rating columns in the database table; total_rating: total ratings (all the ratings added together). rating: the current rating total_ratings: the amount of ratings.

Bu sorun ben $ _POST ['notunu'] değiştirirseniz, ve $ _POST $ _GET için ['kurtulmak'] ve id = 1 & değerlendirme = 4? Send.php, örneğin, url int o bilgileri koymak çalışır ve veritabanı güncellenir. Ben yıldızlı bastığınızda Ancak, güncellenen veritabanı değil. Komut ile karıştırmasını sonra sonrası 0 olarak, ancak id döner çalışma gerektiğini fark etti.

Bunu test etmek için daha ben tıklama işlevi bu koymak:

document.write(current_star+rid);

Iade edildi ne olduğunu görmek için. Sorun döndürülür sayısı I elemanları vurgulamadığınız kez miktarı ile çarpılır bu gibi görünüyor. Ben üzerinde belki gezdirin Yani, yıldızlı 6, daha sonra current_star ve kimlik 6 kez tekrarlanır.

Ben iş için bu almak için bu kadar yakın olduğum gibi herkes ne onunla kalmış bir fikrin var, hissediyorum? Şimdiden teşekkürler.

2 Cevap

Ve jQuery olay işleme hakkında gerçekleştirmek için önemli şey jQuery Eğer herhangi bir olay için multiple geri aramaları kaydetmek için izin verir, yani kayıt defteri tabanlı olduğunu ve bunların bağlı olduğu hangi sırayla çağıracağı .

Her Vurgulu üzerinde daha fazla etkinlik bağlama tutmak çünkü current_star ve id değerleri tekrarlanan görüyoruz nedenidir. Bunun nedeni sizin click() (bu nedenle hover her zaman, kliklerseniz bağlayacaktır, sizin hover() çağrısı içinde diyoruz) olay var.

Bu gibi bir şey kullanarak, vurgulu olay dışında click() olayı bağlayıcı deneyin:

$("[id^=rating_]").children("[class^=star_]").click(function() {
        var rid = $(this).parent().attr("id").split("_")[1];
        var current_star = $(this).attr("class").split("_")[1];

        $.post("send.php", {rating: current_star, id: rid});
});

Ayrıca muhtemelen aynı nedenle başka içinde bir hover() aramayı bağlamak istemiyorum.

Sana $_POST['rid'] yerine $_POST['id'] kullanılan fark ettim. Bu senin problemin olabilir.