当我想在某个事件被触发后阻止其他事件处理程序执行时,我可以使用两种技术之一.我将在示例中使用jQuery,但这也适用于plain-JS:
event.preventDefault()$('a').click(function (e) {
// custom handling here
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
return false$('a').click(function () {
// custom handling here
return false;
});
Run Code Online (Sandbox Code Playgroud)
这两种停止事件传播的方法之间有什么显着差异吗?
对我来说,return false;比执行方法更简单,更短并且可能更不容易出错.使用该方法,您必须记住正确的套管,括号等.
另外,我必须在回调中定义第一个参数才能调用该方法.也许,有一些原因可以解释为什么我应该避免这样做并使用preventDefault呢?有什么更好的方法?
javascript jquery event-handling event-propagation dom-events
我正在使用 HTML 5 必需属性进行表单验证。现在我想要的是,如果表单通过了 HTML 5 验证,它应该将用户带到条带结帐(我特意在下面的代码中为 SO 问题输出信息)。
现在,如果表单未通过验证,则不会处理提交,这很好。但是在我完成表单并提交表单后,它并没有将我带到条纹结帐页面,它只是刷新页面。我究竟做错了什么?
<form id="tcform">
<p><b>Quantity:</b> 1</p>
<b class="price">Price:</b> <s>£xx</s> <span style="color: red;">£xx</span>
<button class="btn btn-default buynow" id="checkout-button-sku_xxx" role="link">
Buy Now
</button>
<p>
<i style="font-size:small">Limited time offer</i>
</p>
<p class="tcparagraph">
<input id="field_terms" type="checkbox" required name="terms"> I accept the <u><a href="Terms" id="tclink">Terms and Conditions</a></u></p>
<div id="error-message"></div>
</form>
<script>
(function() {
var stripe = Stripe('pk_test_xxx');
var checkoutButton = document.getElementById('checkout-button-sku_xxx');
checkoutButton.addEventListener('click', function() {
// When the customer clicks on the button, redirect
// them to Checkout. …Run Code Online (Sandbox Code Playgroud) 我在一个正在研究的网站上遇到了这个奇怪的代码,并且不明白我所看到的行为是如何或为何发生的.
<input type="submit" value="Save" onclick="document.location.href='http://www.google.com'" />
Run Code Online (Sandbox Code Playgroud)
(更改了href;它实际上指向了与表单操作相同的URL).
因为onclick事件在提交表单之前触发,我希望此代码将页面重定向到Google.com,从而停止执行页面并且永远不会提交表单.或者可能重定向到Google.com但仍然完成提交表单.
但是发生的事情似乎是重定向完全被忽略了,无论如何都要提交表单.为什么会这样?
我确认onclick事件发生得很好; 我将重定向移动到一个函数中并调用了函数onclick.在提交之前调用该函数就好了,但是重定向似乎被忽略了.
我有一个表格,我需要在提交之前填写所有字段。目前,正在验证这些字段以检查它们是否为空白。但是,如果按下提交按钮而没有在表单发送的字段中输入任何值,所有字段都返回空白(例如姓名:电话:等)。我尝试在表单字段中添加 HTML5“必需”属性,但这并不能解决不符合 HTML5 的浏览器或 IE 的问题。
我想知道你是否能帮我解决这个问题...谢谢!
在我的页面顶部,我放了:
<script>
$(function(){
$('#message_form').validate({
submitHandler: function(form) {
$(form).ajaxSubmit({
url: 'process.php',
success: function() {
$('#message_form').hide();
$('#contact_form').append("<p id='message_form_thanks'>Thanks! Your request has been sent.</p>")
}
});
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
process.php 代码是:
<?php
// Get Data
$name = strip_tags($_POST['name']);
$phone = strip_tags($_POST['phone']);
$email = strip_tags($_POST['email']);
$message = strip_tags($_POST['message']);
// $url = strip_tags($_POST['url']);
// Send Message
mail( "mailto:postmaster@domain.com", "Contact Form Submission",
"Name: $name\nPhone: $phone\nEmail: $email\nMessage: $message\n",
"From: Website Form Enquiry <$email>" );
?>
Run Code Online (Sandbox Code Playgroud)
我的表单代码是:
<form id="message_form" method="post"> …Run Code Online (Sandbox Code Playgroud) 我想检查是否未选中所有复选框,这将阻止表单被提交.例如,我在表单中有7个复选框(天),如果用户单击提交按钮而不选中其中一个复选框,则会显示错误消息并阻止表单被提交.如果用户选中其中一个复选框,它将运行下面的if-else,如果一切正常,它会将插槽减少1.任何我想知道怎么做?
JQuery代码
var slot = 7;
$(".day").each(function(){
if($(this).is(":checked")){
var num = $('.day').index(this);
if($("[name='sd_input_dosage_value[]']").eq(num).val() == ""){
alert("The dosage is required and cannot be empty.");
return false;
}
else if(!$.isNumeric($("[name='sd_input_dosage_value[]']").eq(num).val())){
alert("The dosage is not a number.");
return false;
}
else if(parseFloat($("[name='sd_input_dosage_value[]']").eq(num).val()) < 0){
alert("The dosage cannot be a negative value.");
return false;
}
else if($("[name='sd_dosage_select_value[]']").eq(num).val() == ""){
alert("The dosage unit cannot be empty.");
return false;
}
else if($("[name='sd_input_quantity_value[]']").val() == ""){
alert("The quantity is required and cannot be empty.");
return false;
}
else …Run Code Online (Sandbox Code Playgroud)