admin管理员组文章数量:1390439
One of the problems I am experiencing at the moment is not being able to call a function in the onclick
event of the submit button.
$(document).ready(function() {
function validate() {
var contactName = document.getElementById("contact-name").value;
alert("Thank you " + contactName);
}
});
<script src=".1.1/jquery.min.js"></script>
<form>
<label for="name">NAME</label>
<input id="contact-name" name="name" placeholder="Please enter your name..." type="text">
<label for="email">EMAIL</label>
<input id="contact-email" name="email" placeholder="Please enter your contact email..." type="text">
<label for="email">MESSAGE</label>
<textarea id="contact-message" name="message" placeholder="Please enter your message.."></textarea>
</form>
<button type="button" id="submit" onclick="validate();">SUBMIT MESSAGE</button>
One of the problems I am experiencing at the moment is not being able to call a function in the onclick
event of the submit button.
$(document).ready(function() {
function validate() {
var contactName = document.getElementById("contact-name").value;
alert("Thank you " + contactName);
}
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<label for="name">NAME</label>
<input id="contact-name" name="name" placeholder="Please enter your name..." type="text">
<label for="email">EMAIL</label>
<input id="contact-email" name="email" placeholder="Please enter your contact email..." type="text">
<label for="email">MESSAGE</label>
<textarea id="contact-message" name="message" placeholder="Please enter your message.."></textarea>
</form>
<button type="button" id="submit" onclick="validate();">SUBMIT MESSAGE</button>
Share
Improve this question
edited Aug 24, 2017 at 17:00
Sebastian Simon
19.6k8 gold badges61 silver badges84 bronze badges
asked Aug 24, 2017 at 16:49
CoderAzCoderAz
995 silver badges12 bronze badges
4
- 2 Possible duplicate of Why can I not define functions in jQuery's document.ready()? – Sebastian Simon Commented Aug 24, 2017 at 16:52
- validate() is not getting called you're just defining it but never calling it – sudo Commented Aug 24, 2017 at 16:52
-
@SoumeshBanerjee It’s in the
onclick
attribute. – Sebastian Simon Commented Aug 24, 2017 at 16:55 - First of all, that's not submit button and it's defined outside the form so it will not submit all the value on submit action. and you don't need to define validate() function inside document.ready. – nikunjM Commented Aug 24, 2017 at 17:08
3 Answers
Reset to default 4You should write the validate()
function outside the $(document).ready
as the onclick
in binded when the DOM loads - while $(document).ready
scopes the function.
This means the function is local to the closure and will not be visible globally if its written so inside $(document).ready
.
See demo below:
function validate() {
var contactName = document.getElementById("contact-name").value;
alert("Thank you " + contactName);
}
<form>
<label for="name">NAME</label>
<input id="contact-name" name="name" placeholder="Please enter your name..." type="text">
<label for="email">EMAIL</label>
<input id="contact-email" name="email" placeholder="Please enter your contact email..." type="text">
<label for="email">MESSAGE</label>
<textarea id="contact-message" name="message" placeholder="Please enter your message.."></textarea>
</form>
<button type="button" id="submit" onclick="validate();">SUBMIT MESSAGE</button>
As others have mentioned, the issue here is the scope that the validate()
function is defined in.
JavaScript is "lexically scoped", meaning that the location of a declaration determines from where it can be reached by other code.
Your validate
function is declared (scoped to) inside the anonymous document.ready
function. This means that the only place where validate
can be "seen" is by other code that shares that scope. The onclick=validate()
line is outside of that scope and that is why your function isn't being called.
However, instead of moving the validate()
function outside of the document.ready()
callback (thus making it global, which is a bad thing), you really should remove the onclick
inline HTML event attribute as this is a bad practice (see this for several reasons why) and do the event binding in the script area. This approach will allow you to set up the event in the same scope as the validate()
function and keep the HTML clean:
$(document).ready(function() {
// Do your event binding in JavaScript, not as inline HTML event attributes:
$("#submit").on("click", validate);
// Now the event handler reference and the function are in the same scope
function validate() {
var contactName = document.getElementById("contact-name").value;
alert("Thank you " + contactName);
}
});
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form>
<label for="name">NAME</label>
<input id="contact-name" name="name" placeholder="Please enter your name..." type="text">
<label for="email">EMAIL</label>
<input id="contact-email" name="email" placeholder="Please enter your contact email..." type="text">
<label for="email">MESSAGE</label>
<textarea id="contact-message" name="message" placeholder="Please enter your message.."></textarea>
</form>
<button type="button" id="submit">SUBMIT MESSAGE</button>
Here's a bit more on scope.
First, you should avoid inline handlers like that. Second, depending on the form submission process. You should have the button inside your <form>
tags. Then add <form method="POST" action="/someurl/to/post/to">
.
Otherwise, use jQuery and $.ajax()
with a click
event handler:
$('#submit').on('click', () {
$.ajax({check properties in jquery api docs}, (result) => {
// do something
},
(e) => {
// do something on error
})
})
本文标签: javascriptonclick for button not calling functionStack Overflow
版权声明:本文标题:javascript - onclick for button not calling function - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744663697a2618402.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论