我是jquery的新手,但我正在尝试在我的项目中使用它。 我正在尝试循环遍历#rate_box中的所有链接并向其添加点击事件。这个点击事件会将一些数据发布到一个外部的PHP脚本,然后它应解除所有链接上的点击事件(所以人们不能快速连续两次。)然后它应该将从PHP脚本收到的数据放入一个span标签名为#status。
但是我的代码甚至没有执行警报(“索引:”+ i)。我是否正确绑定了它?
<script type="text/javascript">
$(document).ready(function(){
$('#rate_box a').each(function(i) {
$(this).click(function() {
alert("Index: "+i);
$.post("../includes/process/rating.php", {id: "<?php $game_id ?>", type: "game", rating: i+1},
function(data) {
$('#rate_box a').each(function(i) {
$(this).unbind('click');
}
$('#status').html(data).fadeIn("normal");
});
});
});
});
</script>
答案 0 :(得分:5)
您不需要循环遍历绑定处理程序的每个链接,您可以这样做:
// bind click handler to all <a> tags inside #rate_box
$('#rate_box a').click(function() {
});
解除绑定也是如此:
$('#rate_box a').unbind('click');
就你的代码而言,它可能没有执行,因为当你解开元素标签时你还没有关闭内部,所以它是无效的javascript:
$('#rate_box a').each(function(i) {
$(this).unbind('click');
} // <- missing closing ");"
你应该使用像Firebug或Firebug Lite这样的工具来调试你的javascript,虽然上面的内容应该只是在大多数浏览器中给你一个Javascript错误。
编辑如果要在点击时查找当前链接的索引,请执行以下操作:
var links = $('#rate_box a');
$(links).click(function() {
// this is to stop successive clicks on ratings,
// although the server should still validate to make
// sure only one rating is sent per game
if($(this).hasClass('inactive_for_click')) return false;
$(links).addClass('inactive_for_click');
// get the index of the link relative to the rest, add 1
var index = $(links).index(this) + 1;
$.post("../includes/process/rating.php", {
id: "<?php $game_id ?>",
type: "game",
rating: index
}, function(data) {
$('#status').html(data).fadeIn("normal");
// unbind links to disable further voting
$(links).unbind('click');
});
});