Ajax 服务器返回html字符串中元素的事件绑定方法
分类:JavaScript2012-02-25 21:463951人阅读评论(2)收藏举报
前几天写代码遇到一个纠结的问题,就是使用Ajax技术的时候,服务器返回的HTML字符串中元素的Jquery控制或者说是事件绑定方法失效,但是CSS控制是正常的,而如果不采用Ajax技术,则不会产生这样的问题。后来终于发现,其实Jquery绑定事件的元素是当前页面的元素,而采用Ajax技术后,服务器返回的HTML代码中的元素隶属于另一个页面,此时其中的元素也当然不会被绑定事件。
我们来详细看一下。我们平常为元素绑定事件是这样做的,以我做的实验为例:
[javascript]view plaincopy
<scripttype="text/javascript"
src=\'#\'" /span>
echobase_url("items/js/index/base_all.js")?>"></script>
然后这个文件中的元素及可以用JS文件中的方法来控制了。假如说我的main.PHP有这样一段代码:
[PHP]
src=\'#\'" /span>
echobase_url($picture_path);
?>alt=""
class="product_focus"></img></a></div>
我想控制img这个元素。并在base_all.js写了这样一段代码:
$(function(){
$(".product_focus").bind(
'mouSEOver',
function(){
$(this).parent().parent().parent().parent().parent().children(
'.product_display').css(
{
top:$(this).position().top+"px",
left:$(this).position().left-15
+$(this).outerWidth(false)+"px"
});
$(this).parent().parent().parent().parent().parent().children(
'.product_display').show();
});
$(".product_focus").bind('mouseleave',function(){
$(".product_display").hide();
});
});
这样就可以产生相应的鼠标移入移除的效果。
但是如果main.PHP中的这段代码是Ajax服务器返回的,Jquery特效就不会起一点作用。
如:
$.ajax({
type:"POST",
url:"<?PHPechosite_url("ajax_part/getProductDetail");?>",
success:function(data)
{$(".just").empty();
}
});
其中data就是这段HTML代码,就会不起效果。这大概就是我当初遇到的问题,其实细细想想解决这个问题其实不难,既然Jquery只能给当前页面的元素绑定事件,那么我们就可以在Ajax返回的HTML字符串载入到当前页面后对其元素进行事件的重新绑定。方法就是这样:
不用包含base_all.js这个JS文件,而把其中的Jquery控制代码写入$.ajax中。如下:
function(data)
{
$(".just").empty();
$(".just").html(data);
afterLoad();
}
});
{
$(function(){
$(".product_display").hide();
});
}