Jquery 奇怪的代码:JS Console.log()以不同的输出输出两次

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

我试图通过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,但没有使用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。谢谢现在它起作用了。我应该知道它不会被重新加载,我只是没有花时间寻找答案;)。谢谢你的帮助。