在 jQuery on 函数中同时对多个项目运行时保持一致的值
Keeping a value consistent In jQuery on function when run on multiple items at the same time
我正在编写一个模块,其中包含用户可以选择回答的多个问题。 每个按钮都有自己的提交按钮,用于将数据发布到我的应用程序,显示结果,然后删除表单。 我能够让这篇文章完美地工作,但是如果我添加一个按钮,允许用户一次提交所有表单,它会正确提交表单数据,但结果会附加到最后一个问题(项目正在获取正确的数据(。 这是我正在使用的javascript/jQuery代码:
// setup the save answer click handler
$(document).on('click', '.saveAnswer', function(event){
event.preventDefault();
// get the form
form = $(this).closest('form');
$.ajax({
async:true,
type: 'POST',
url: form.attr('action'),
data: form.serialize(),
success: function(data){
// append the text to the bottom of the answers
form.closest('.question').find('.answers').append('<li>' + data + '</li>').hide().slideDown(500);
form.slideUp(500,function(){
form.remove();
});
}
});
});
// setup the save all answer click handler
$(document).on('click', '.saveAll', function(){
$('.saveAnswer').trigger('click');
});
如果我将async
值更改为 false,那么它可以正常工作,但没有任何动画工作,页面似乎冻结了一秒钟,直到提交所有答案。
经过一些调试,我发现每次运行函数时都会覆盖form
变量。 有没有办法防止这种情况发生?
form
是一个全局(或至少是更高范围的(变量,这意味着对处理程序的每次调用都会践踏旧值,并且success
/error
回调都共享相同的值。
使其成为本地 ( var form = $(....);
(,以便处理程序的每个调用都有自己的值。
以防万一,如果你不想改变变量的范围,你可以使用闭包来存储表单变量,就像这样
form = $(this).closest('form');
$.ajax({
.....
success:(function (formClosure) {
return function(data){
// for this function formClosure will be local variable,
// so changing form variable doesn't take effect
formClosure.closest('.question').find('.answers').append('<li>' + data + '</li>').hide().slideDown(500);
formClosure.slideUp(500,function(){
form.remove();
});
};
})(form)
});
相关文章:
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- JavaScript运行时是如何工作的
- 在运行时创建元素时移到一边时出错
- 如何在运行时在HTML5画布中绘制正方形
- 如何在运行时使用javascript隐藏图像
- 在运行时使用jquery准备表体会导致设计问题
- 使用主题运行时portlet liferay时出现Javascript错误
- JavaScript运行时事件循环现有技术
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 在 jQuery on 函数中同时对多个项目运行时保持一致的值
- 当项目停止在.NET中运行时,有没有办法阻止web方法工作
- 在项目后期将Vue.js从独立构建更改为仅运行时构建
- 什么时候(编译/运行时)一个依赖的节点模块被链接到项目时,它是require()'
- 将 Rails 3.1 项目部署到 Heroku 时出现问题:找不到 JavaScript 运行时