我们何时使用 preventDefault 方法重要吗?
Does it matter when we use the preventDefault method?
我们何时使用 preventDefault 方法有关系吗? (就在函数的开头与结尾)。我看过的所有教程都将 preventDefault 放在函数的末尾,但我认为您要做的第一件事就是阻止默认行为。我注意到它在函数的开头和在函数的最后都起作用:
function calculateResults(e){
e.preventDefault();
//UI Vars
const amount = document.querySelector(`#amount`);
const interest = document.querySelector(`#interest`);
const years = document.querySelector(`#years`);
const monthlyPayment = document.querySelector(`#monthly-payment`);
const totalPayment = document.querySelector(`#total-payment`);
const totalInterest =document.querySelector(`#total-interest`);
const princapal = parseFloat(amount.value);
const calculatedInterest = parseFloat(interest.value)/100/12;
const calculatedPayment = parseFloat(years.value) * 12;
// compute monthly payments
const x = Math.pow(1 + calculatedInterest, calculatedPayment);
}
VS
function calculateResults(e){
//UI Vars
const amount = document.querySelector(`#amount`);
const interest = document.querySelector(`#interest`);
const years = document.querySelector(`#years`);
const monthlyPayment = document.querySelector(`#monthly-payment`);
const totalPayment = document.querySelector(`#total-payment`);
const totalInterest =document.querySelector(`#total-interest`);
const princapal = parseFloat(amount.value);
const calculatedInterest = parseFloat(interest.value)/100/12;
const calculatedPayment = parseFloat(years.value) * 12;
// compute monthly payments
const x = Math.pow(1 + calculatedInterest, calculatedPayment);
e.preventDefault();
}
我想我主要担心的是,如果我在函数中进行了很多操作,浏览器是否有可能在最后进入 preventDefault 之前执行其默认行为?或者它会在尝试执行其默认行为之前等待执行函数中的所有操作吗?
最好的做法是尽快调用它。
如果代码在到达 preventDefault
之前抛出任何错误,它可能不会被调用,浏览器将执行默认操作。
一旦调用它,但是如果之后抛出错误,默认操作将不会发生
有些情况下您并不总是想使用 e.preventDefault
,这意味着您在函数中的何处调用它并不重要。
这是一些 example code from MDN:
function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
也就是说,如果我绝对打算阻止默认操作,我自己通常会在开头调用它。
在事件流的任何阶段调用 preventDefault() 都会取消该事件,这意味着该事件通常由实现执行的任何默认操作都不会发生。 preventDefault
这很重要
按预期工作
function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
它会取消所有的事件动作"if you type a letter it won't work" //只从地方
改变evt.preventDefault
function checkName(evt) {
evt.preventDefault();
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
示例codePen
我们何时使用 preventDefault 方法有关系吗? (就在函数的开头与结尾)。我看过的所有教程都将 preventDefault 放在函数的末尾,但我认为您要做的第一件事就是阻止默认行为。我注意到它在函数的开头和在函数的最后都起作用:
function calculateResults(e){
e.preventDefault();
//UI Vars
const amount = document.querySelector(`#amount`);
const interest = document.querySelector(`#interest`);
const years = document.querySelector(`#years`);
const monthlyPayment = document.querySelector(`#monthly-payment`);
const totalPayment = document.querySelector(`#total-payment`);
const totalInterest =document.querySelector(`#total-interest`);
const princapal = parseFloat(amount.value);
const calculatedInterest = parseFloat(interest.value)/100/12;
const calculatedPayment = parseFloat(years.value) * 12;
// compute monthly payments
const x = Math.pow(1 + calculatedInterest, calculatedPayment);
}
VS
function calculateResults(e){
//UI Vars
const amount = document.querySelector(`#amount`);
const interest = document.querySelector(`#interest`);
const years = document.querySelector(`#years`);
const monthlyPayment = document.querySelector(`#monthly-payment`);
const totalPayment = document.querySelector(`#total-payment`);
const totalInterest =document.querySelector(`#total-interest`);
const princapal = parseFloat(amount.value);
const calculatedInterest = parseFloat(interest.value)/100/12;
const calculatedPayment = parseFloat(years.value) * 12;
// compute monthly payments
const x = Math.pow(1 + calculatedInterest, calculatedPayment);
e.preventDefault();
}
我想我主要担心的是,如果我在函数中进行了很多操作,浏览器是否有可能在最后进入 preventDefault 之前执行其默认行为?或者它会在尝试执行其默认行为之前等待执行函数中的所有操作吗?
最好的做法是尽快调用它。
如果代码在到达 preventDefault
之前抛出任何错误,它可能不会被调用,浏览器将执行默认操作。
一旦调用它,但是如果之后抛出错误,默认操作将不会发生
有些情况下您并不总是想使用 e.preventDefault
,这意味着您在函数中的何处调用它并不重要。
这是一些 example code from MDN:
function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
也就是说,如果我绝对打算阻止默认操作,我自己通常会在开头调用它。
在事件流的任何阶段调用 preventDefault() 都会取消该事件,这意味着该事件通常由实现执行的任何默认操作都不会发生。 preventDefault
这很重要
按预期工作
function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
它会取消所有的事件动作"if you type a letter it won't work" //只从地方
改变evt.preventDefaultfunction checkName(evt) {
evt.preventDefault();
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
displayWarning(
"Please use lowercase letters only."
+ "\n" + "charCode: " + charCode + "\n"
);
}
}
}
示例codePen