成功的ajax函数后其他jquery函数不起作用
Posted
技术标签:
【中文标题】成功的ajax函数后其他jquery函数不起作用【英文标题】:Other jquery functions NOT working after successful ajax function 【发布时间】:2013-01-29 13:37:57 【问题描述】:编辑
JQUERY-AJAX 请求代码:
<script type="text/javascript">
$(document).ready(function()
$(".form").submit( function(e)
e.preventDefault();
var form = $(this);
var div_add_comment = $(form).parent();
var div_comments = $(div_add_comment).parent();
$.ajax(
type: "POST",
data: $(form).serialize(),
url: "includes/comment.php",
success: function(msg)
$(div_comments).html(msg);
);
return false;
);
);
</script>
JQUERY 显示全部 - 折叠评论代码
<script type="text/javascript">
$(document).ready(function()
$('.see_all').click(function()
var thisItem = $(this);
thisItem.parent().find('#comment2').slideDown('fast');
thisItem.parent().find('.collapse').css('display','inline-block');
thisItem.css('display','none');
return false;
);
$('.collapse').click(function()
var thisItem = $(this);
thisItem.parent().find('#comment2').slideUp('fast');
thisItem.css('display','none');
thisItem.parent().find('.see_all').css('display','inline-block');
return false;
)
)
</script>
JQUERY REMOVE DEFAULT VALUE TEXT ON FOCUS - TEXTAREA
<script type="text/javascript">
$(document).ready(function()
var Input = $('textarea[name=comment]');
var default_value = Input.val();
$(Input).focus(function()
if($(this).val() == default_value)
$(this).val("");
).blur(function()
if($(this).val().length == 0)
$(this).val(default_value);
);
)
</script>
如果您需要其他任何内容,请告诉我,我有最宝贵的时间在这些帖子中复制代码并对其进行格式化。
结束编辑
我遇到了一个奇怪的小问题。我创建了一个 jquery-ajax 函数来从我页面的 cmets 部分传输数据。该页面在每个用户帖子下都有一个此表单的实例。所以这个页面会有 X 个帖子,每个帖子有 X 个 cmets,就像一个社交网络。我的 ajax 请求完美地发送、接收和显示数据但是我有另外两个调用内部元素的 jquery 函数,这些函数在 ajax 函数返回 html 后不再起作用。 ajax 函数未处理的所有其他函数仍然有效。我已经检查并重新检查了来自 ajax 函数的响应 html,它与标准 post-comment 实例的 html 相同。
如果您想看什么或有任何疑问,请告诉我。
谢谢,我们永远感谢您的帮助!
【问题讨论】:
听起来像是事件绑定问题 - 发布您的代码 好的 AlienWebguy,给我一点时间。 分享代码片段...我过去也遇到过类似的问题,但我无法判断您是否遇到同样的问题而没有看到一些代码。 你的标题在说什么? 好的,伙计们,在上面发布我的 jquery 代码,问题再次是在提交 ajax 请求后,用于删除 textarea 和 show-collapse cmets 功能的其他两个 jquery 函数不再起作用,就像他们在页面上的其他评论后实例上所做的那样。 【参考方案1】:确保绑定 jQuery 函数,使元素不必存在。
$('ul').on('click', 'li', function() /* do something */ );
这将在函数绑定后添加的 LI 上执行。
在您的情况下,您可能希望绑定到 cmets 部分的父级并定位具有点击行为的元素。
$('.comments')
.on('click', '.see_all', function()...)
.on('click', '.collapse', function()...)
.on('focus', 'textarea[name=comment]', function()...)
.on('blur', 'textarea[name=comment]', function()...)
【讨论】:
我已经在上面发布了一些代码,你能详细说明你与我的编辑有关吗? 好的,我试试 ArrayKnight,这很有道理,我会告诉你的。 ArrayKnight,谢谢你的帮助,我得到了我需要的结果!我真的很感激人。检查是否已接受。【参考方案2】:尝试从表单中删除 $()。
你有这个:
var form = $(this);
var div_add_comment = $(form).parent();
var div_comments = $(div_add_comment).parent();
应该是这样的:
var form = $(this),
div_add_comment = form.parent(),
div_comments = $(div_add_comment).parent();
既然你声明了 var form = $(this); 你就不需要换行了……你现在拥有它就相当于 $((form))
不确定这是否能解决您的问题,但 jQuery 可能会挂断此问题,因为您正在从 $(this) 生成子代。
【讨论】:
试过了,它仍然像以前一样工作,但仍然有同样的问题。以上是关于成功的ajax函数后其他jquery函数不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jquery Ajax 后,Angular 函数突然不起作用
Ajax加载后按钮上的JQuery HTML onclick属性不起作用