Javascript 单击时ajax结果始终更新上次单击的元素
考虑下面的代码,如果我单击一行中的3个链接,最后一次单击的“部分”将更新3次,前2次更新相同。(假设在ajax完成之前单击3个链接)Javascript 单击时ajax结果始终更新上次单击的元素,javascript,jquery,ajax,Javascript,Jquery,Ajax,考虑下面的代码,如果我单击一行中的3个链接,最后一次单击的“部分”将更新3次,前2次更新相同。(假设在ajax完成之前单击3个链接) 点击我 点击我 点击我 $('.show records')。在('click',函数(e)上{ el=$(this).parent();//获取已单击链接的父级 $.ajax({ 网址:“…”, 方法:“POST”, 数据:$(this).data('data'), beforeSend:function(){ el.html(“加载”;//显示微调器 },
点击我
点击我
点击我
$('.show records')。在('click',函数(e)上{
el=$(this).parent();//获取已单击链接的父级
$.ajax({
网址:“…”,
方法:“POST”,
数据:$(this).data('data'),
beforeSend:function(){
el.html(“加载”;//显示微调器
},
错误:函数(){
警报({{‘未知错误’| trans({},'alerts')});
}
}).then(函数(html){
el.html(html);//使用表更新html
});
});
我只能假设这是因为每次单击都会更新我的el
变量,“然后”总是使用最新的el
如何在每个单击事件之间隔离父元素
我曾尝试使用
success
&在$中完成函数。ajax
但是这个&$(这个)
不再是单击的元素。如果您将el作为常量进行新的引用。它会解决你的问题
const myEl=$(this.parent();//如果将el作为常量进行新引用,则获取已单击链接的父级。它会解决你的问题
const myEl=$(this.parent();//获取已单击链接的父级
问题似乎很简单,el
变量从未在任何地方正式声明过。使用未声明的变量会引发错误,并且会在“严格模式”下发生错误,但除非您选择使用该模式(强烈建议),否则JS引擎将隐式声明全局范围中任何未声明的变量
这可能会导致各种各样的严重问题,但这里的特殊问题只是三个事件处理程序函数“共享”了相同的el
变量,因此以您观察到的方式覆盖了它
然而,如果您将其声明为局部变量(这与“老式的”var
关键字同样有效,但让我们更现代一些),使用let el=…
,这个问题就会消失<每次运行3个事件处理程序中的任何一个时,都会重新创建代码>el
,指向正确的元素,并且没有一个会影响其他事件处理程序
[事实上,正如在其他评论/回答中指出的那样,const
在这里比let
]好。问题似乎很简单,el
变量从未在任何地方正式声明过。使用未声明的变量会引发错误,并且会在“严格模式”下发生错误,但除非您选择使用该模式(强烈建议),否则JS引擎将隐式声明全局范围中任何未声明的变量
这可能会导致各种各样的严重问题,但这里的特殊问题只是三个事件处理程序函数“共享”了相同的el
变量,因此以您观察到的方式覆盖了它
然而,如果您将其声明为局部变量(这与“老式的”var
关键字同样有效,但让我们更现代一些),使用let el=…
,这个问题就会消失<每次运行3个事件处理程序中的任何一个时,都会重新创建代码>el
,指向正确的元素,并且没有一个会影响其他事件处理程序
[事实上,正如其他评论/回答中指出的,const
在这里比let
]更好。我会在承诺之外创建一个函数,并使用.then()调用它来设置el。声明的el
变量在哪里?如果在这些函数之外不需要它,那么只需重写el=代码>as让el=代码>el=$(this).parent();//获取已单击链接的父项javascript@RobinZigmond成功了!!!我以前从未使用过let
,如果您提供一个答案并稍加解释,我会选择它。我已经搞了两个小时了!更好的是,当您创建el
变量来存储单击元素的父元素时,您希望el
永远不会更改,因此将其声明为const el=…
我会在承诺之外创建一个函数,并使用.then()调用它来设置el。声明的el
变量在哪里?如果在这些函数之外不需要它,那么只需重写el=代码>as让el=代码>el=$(this).parent();//获取已单击链接的父项javascript@RobinZigmond成功了!!!我以前从未使用过let
,如果您提供一个答案并稍加解释,我会选择它。我已经搞了两个小时了!更好的是,当您创建el
变量来存储单击元素的父元素时,您希望el
永远不会更改,所以将其声明为const el=…
50颗金星!谢谢你的解释。我未来的JavaScript会更好。50颗金星!谢谢你的解释。我未来的JavaScript将会更好。