功能在单击时不工作?(jquery/javascript)

功能在单击时不工作?(jquery/javascript),javascript,jquery,Javascript,Jquery,这可能是我在编码时遇到的最令人沮丧的错误。我试着点击一个按钮,让它在提醒框中弹出“你好”。如果我准备好删除文档,它就会工作。如果我删除了该函数,并在document.ready中设置了警报框,它也可以工作,但显然不需要单击。然而,JS不能一起工作,我不知道为什么 HTML 当您将函数或变量放入函数中时,其作用域仅限于该函数,这意味着它仅在该函数中可见 要解决这个问题,只需将“ready function”外部使用的函数移动到外部可见即可 $(document).ready(function(){

这可能是我在编码时遇到的最令人沮丧的错误。我试着点击一个按钮,让它在提醒框中弹出“你好”。如果我准备好删除文档,它就会工作。如果我删除了该函数,并在document.ready中设置了警报框,它也可以工作,但显然不需要单击。然而,JS不能一起工作,我不知道为什么

HTML


当您将函数或变量放入函数中时,其作用域仅限于该函数,这意味着它仅在该函数中可见

要解决这个问题,只需将“ready function”外部使用的函数移动到外部可见即可

$(document).ready(function(){
    // code here
});

function signupSubmit(){
    alert("hello");
}
或者,更好。将Javascript代码仅保留为Javascript文件,并将HTML仅与HTML一起使用

HTML

<button id="signup-box-button" type="button">sign up</button>

当您将函数或变量放入函数中时,其作用域仅限于该函数,这意味着它仅在该函数中可见

要解决这个问题,只需将“ready function”外部使用的函数移动到外部可见即可

$(document).ready(function(){
    // code here
});

function signupSubmit(){
    alert("hello");
}
或者,更好。将Javascript代码仅保留为Javascript文件,并将HTML仅与HTML一起使用

HTML

<button id="signup-box-button" type="button">sign up</button>

这是因为Skarllot解释了javaScript中的作用域

请了解
这个
关键字如何与内联事件处理程序一起工作

您可以使用下面的代码段

$(document).ready(function(){

     this.signupSubmit = function(){
        alert("hello");
    }

});
提及

通过添加
关键字,
功能
将在全局范围内注册。上述解决方案可能会污染全局命名空间

要更好地理解上述功能,请执行以下操作:

内联事件处理程序在全局范围内进行计算。在第一个示例中,
signupSubmit
不是在全局范围中定义的,而是在传递给
$(document).ready的函数中定义的。因此,内联事件处理程序无法找到该函数

以下是一个简化的示例:

function ready() {
    function signupSubmit() { }
}

ready();
signupSubmit(); // ReferenceError because signupSubmit is not defined in this scope

注意没有理由将函数定义放在
$(文档)中。ready
回调,除了我在第一个示例中提到的通过使用
this
关键字显式地不将它们放在全局范围之外。

这是因为Skarllot解释了javaScript中的作用域

请了解
这个
关键字如何与内联事件处理程序一起工作

您可以使用下面的代码段

$(document).ready(function(){

     this.signupSubmit = function(){
        alert("hello");
    }

});
提及

通过添加
关键字,
功能
将在全局范围内注册。上述解决方案可能会污染全局命名空间

要更好地理解上述功能,请执行以下操作:

内联事件处理程序在全局范围内进行计算。在第一个示例中,
signupSubmit
不是在全局范围中定义的,而是在传递给
$(document).ready的函数中定义的。因此,内联事件处理程序无法找到该函数

以下是一个简化的示例:

function ready() {
    function signupSubmit() { }
}

ready();
signupSubmit(); // ReferenceError because signupSubmit is not defined in this scope

请注意没有理由将函数定义放在
$(文档)中。ready
回调,除了我在第一个示例中提到的通过使用
this
关键字显式地不将它们放在全局范围之外。

也许您希望将其放在文档中。ready块?:$(“#注册框按钮”).on('点击',注册提交);如果你把这个函数放在一个文档就绪的处理程序中,当它绑定到HTMLY时它就不存在了。你真的应该停止使用内联事件处理程序——尤其是考虑到你可以使用它。我现在觉得自己真的很愚蠢。。。我已经几个月没有编码了,我不知道为什么我决定把它放在文档中。readyPerhaps你想把它放在文档中。ready block?:$(“#注册框按钮”)。on('click',signupSubmit);如果你把这个函数放在一个文档就绪的处理程序中,当它绑定到HTMLY时它就不存在了。你真的应该停止使用内联事件处理程序——尤其是考虑到你可以使用它。我现在觉得自己真的很愚蠢。。。我已经有几个月没有编写代码了,我不知道为什么我决定将它放在文档中。Ready这似乎不是一个好的做法。我不建议这样做。请在使用内联事件处理程序时参考。你能解释一下为什么这不是一个好的做法吗?我对这一点很陌生虽然你没有污染全局范围,但是你仍然用Javascript代码污染HTML。我同意全局名称空间将被污染。我不明白HTML和Javascript代码是如何被污染的,你能解释一下吗?例如,
onclick=“signupSubmit()”
是HTML代码上的Javascript代码。以我回答的第二部分为例,这似乎不是一个好的做法。我不建议这样做。请在使用内联事件处理程序时参考。你能解释一下为什么这不是一个好的做法吗?我对这一点很陌生虽然你没有污染全局范围,但是你仍然用Javascript代码污染HTML。我同意全局名称空间将被污染。我不明白HTML和Javascript代码是如何被污染的,你能解释一下吗?例如,
onclick=“signupSubmit()”
是HTML代码上的Javascript代码。请参见我答案的第二部分作为示例。