Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击时ajax结果始终更新上次单击的元素_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 单击时ajax结果始终更新上次单击的元素

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(“加载”;//显示微调器 },

考虑下面的代码,如果我单击一行中的3个链接,最后一次单击的“部分”将更新3次,前2次更新相同。(假设在ajax完成之前单击3个链接)

点击我
点击我
点击我
$('.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将会更好。