我是Jquery的新手,我在ajax中重新更新包含网址的代码! 它第一次工作,但是在ajax响应重写html之后链接不再起作用。
请在下面找到我的代码。
首先是HTML标记(View)
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("a[class=unselected_quid], a[class=quid_selected]").click(function(){
var url = $(this).attr("name");
alert(url);
$.ajax({
url: "index.php",
type: "POST",
data: url,
dataType: "html",
success: function(msg) {
$("#result").html(msg);
},
error: function(){
alert("error!!!");
}
});
});
});
</script>
</head>
<?php // set url strings in php
$url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1";
$url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2";
?>
<body>
<div id="result"><br>
<a name='<?echo $url?>' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a> <br>
<a name='<?echo $url2?>' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a><br>
</div>
</body>
然后PHP(控制器)
public function ajaxLinkResponse(){
$url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1";
$url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2";
$code = "<a name='{<?$url?>}' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a>
<a name='{<?$url2?>}' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a>";
echo($code);
}
答案 0 :(得分:4)
您需要使用.live()
或.delegate()
代替.click()
,因为您在AJAX调用中创建了新的DOM元素,而.click()
无法满足DOM元素的创建需求。
即。
$("a[class=unselected_quid], a[class=quid_selected]").live('click',function(e){
e.preventDefault();
// rest of code
或
$(aWrapper).delegate('a[class=unselected_quid], a[class=quid_selected]','click',function(e){
e.preventDefault();
// rest of code
你可能会问'有什么区别?'好this应该有所帮助。 基本上委托更快,不会因为繁重的DOM遍历而崩溃,并且你可以提供一个上下文(这是一个很大的特性)。