Jquery 奇怪的代码:JS Console.log()以不同的输出输出两次
我试图通过html中的复选框/编辑按钮从表行中读取ID。该行的id为“name_id#”,代码如下:Jquery 奇怪的代码:JS Console.log()以不同的输出输出两次,jquery,asp.net-mvc-3,console,razor,Jquery,Asp.net Mvc 3,Console,Razor,我试图通过html中的复选框/编辑按钮从表行中读取ID。该行的id为“name_id#”,代码如下: $('.EditButton').click(function edit() { var patchID = parseInt($(this).attr('id').slice(5)); console.log("patchID is : " + patchID.toString()); ... }); 我尝试过使用substring和slice,但没有使用pa
$('.EditButton').click(function edit() {
var patchID = parseInt($(this).attr('id').slice(5));
console.log("patchID is : " + patchID.toString());
...
});
我尝试过使用substring和slice,但没有使用parseInt。一切似乎都正确地获取了ID号,但当我记录它时,它会输出以下内容:
帕奇德:63
帕奇德是:南
我的代码有什么问题吗?当我尝试使用ID使用jquery“get”时,它会工作,但它也会抛出一个错误,因为它尝试使用ID#和“NaN”来“get”
以下是我的表格行的html:
@foreach (var patch in patches)
{
<tr id=@string.Format("patch_{0}", patch.PatchID)>
<td>
<div class="EditButton">
<input type="button" class="button EditButton"
value=""
id=@string.Format("edit_{0}", patch.PatchID) />
</div>
<div class="SaveButton">
<input type="button" class="button SaveButton hidden"
value=""
id=@string.Format("save_{0}", patch.PatchID) />
</div>
</td>
</tr>
}
@foreach(补丁中的var补丁)
{
}
谢谢你的帮助 $('.EditButton')
将div
和input
与.EditButton
类相匹配。input
为您提供63,而div
为您提供NaN,因为它没有id
属性
我将从div中删除
.EditButton
类(除非您将其用于样式设置),以防止单击处理程序被调用两次。您的类名出现两次,并且一个在另一个中。我的意思是,您只需从div的元素中删除class=“EditButton”和class=“SaveButton”
详情如下:
当您单击输入按钮时,它将触发许多单击事件,一个用于您单击的元素,另一个用于此元素的每个父元素
由于您使用$将事件影响到共享公共类名的所有元素,并且这些元素中的两个元素彼此相连,因此事件将被触发两次
您还可以向两个div添加一个id,然后,第二个Console.log将报告此值 这里发生了几件事。首先,将
EditButton
类应用于包含div和输入按钮字段。因此,两者都将得到一个click事件处理程序
接下来,您只需在按钮本身上设置id
接下来,我猜您没有告诉JavaScript您已经处理了事件(通常返回
false
),因此它会在包含链中冒泡。按钮首先处理单击,然后处理div容器。您的按钮和包含它的div
上都有相同的类名(“EditButton”)。这意味着jqueryclick处理程序在点击按钮时会被触发两次——一次是针对按钮本身,一次是针对包含的div
要解决此问题,您可以从父级
div
中删除或更改类,或者检查事件处理程序函数中的事件.target
,查看按钮是否被单击。@wong2-ASP.NET MVC3 Razor视图引擎。非常感谢!令人惊讶的是,你犯了多么简单的错误,让你很难看清自己:)对不起,我对JS很陌生。你能解释一下假报税表应该放在哪里吗?这应该出现在每个javascript函数中吗?下面是JSFIDLE中的一个示例:本质上:return false是为了阻止事件冒泡到父容器。运行带有注释的示例,然后取消注释以查看差异。我理解这个想法,但是当我尝试您的示例时,它仍然有两个带有注释或未注释返回语句的警报。这些返回语句在所有javascript函数中都是必需的吗?进行更改后是否单击了Run?更改JavaScript不会导致重新加载小提琴。只有在事件处理程序中才需要返回false,以确保事件不会在链上冒泡到其父事件。当然,一般的JavaScript函数不需要返回false。(例如,jQuery函数返回jQuery集合。)在进行更改后,我没有单击Run。谢谢现在它起作用了。我应该知道它不会被重新加载,我只是没有花时间寻找答案;)。谢谢你的帮助。