我的网站上有一个使用jquery的页面。在jquery脚本中有使用css类的onclick事件,我也使用jquery ajax调用从我的数据库中获取数据,然后返回结果并通过网站上我的页面上的ajax加载结果。在ajax调用返回的结果中是在我的jquery脚本中具有onclick事件设置的css类。我的问题是当我通过ajax返回结果时onclick事件没有工作,如果我不使用ajax并且只是通过页面本身加载结果然后onclick事件工作。有没有办法让jquery onclick事件在ajax调用返回的数据中工作?
$('#myformsubmit').click(function(){
var dataString = $('#myform').serialize();
$.ajax({
type:"POST",
url:"/ajax/formaction/process.php",
data:dataString,
success: function(data) {
var formdata = $.parseJSON(data);
$('#myformsg').html(formdata.formmsg);
$('html, body').animate({ scrollTop:0 }, '1000');
if(formdata.status == 'success')
{
$('#myform')[0].reset();
}
}
});
return false;
});
然后我有点击事件的代码:
$('.selectoption').click(function(){
var optionurl = $(this).attr('alt');
window.location = '/option/view/' + optionurl;
return false;
});
在ajax调用的结果中,selectoption类与一个按钮相关联,当我点击它时没有任何反应。当我直接通过页面加载结果时它可以正常工作。有什么建议吗?
答案 0 :(得分:1)
我不清楚你在做什么,但你可以尝试使用'live' -
$('.selectoption').live('click',function(){
var optionurl = $(this).attr('alt');
window.location = '/option/view/' + optionurl;
return false;
});
这会将click事件分配给所有'.selectoption'类,包括那些动态创建的类。
答案 1 :(得分:1)
我不清楚,但我猜你已经通过ajax更新了你的页面,并且元素(selectoption类)来自服务器并动态地插入到dom中。如果是这样,那么你肯定应该使用jQuery.live()方法,因为肯定(通过ajax)插入的元素没有绑定到你在document.ready事件中声明的click事件。 所以它应该是 -
$('.selectoption').live('click', function() {
var optionurl = $(this).attr('alt');
window.location = '/option/view/' + optionurl;
return false;
});
答案 2 :(得分:0)
您需要使用jQuery.live()
$('.selectoption').live('click', function() {
var optionurl = $(this).attr('alt');
window.location = '/option/view/' + optionurl;
return false;
});
答案 3 :(得分:0)
我的旋转:
$('.parent').delegate('.selectoption', 'click', function(event) {
event.preventDefault();
var optionurl = $(this).attr('alt');
window.location = '/option/view/' + optionurl;
});
“。parent”只是我编造的选择器。你需要在页面上用一些元素替换它,它总是包含你的.selectoption,但绝不会被dom操作破坏。可能是你的'#myform'我相信。如果没有,一个包装div,如果你绝望,它可能只是'身体'。
我假设您要“返回false”,以防止默认行为。在我的例子中,我使用preventDefault()代替。