如何在 onclick 函数调用中传递变量?
How to pass in variables inside function calls at onclick?
我对如何将变量传递到 onclick
属性内的函数调用有疑问。 这实际上是一种不好的做法,但我仍然想知道以备不时之需。
例如:
let parsed = document.querySelector('input').value.replace('/\^/','**');
function evaluat(expr){
console.log(eval(expr));
}
<input></input>
<p><button onclick="evaluat(parsed)">Compute</button></p>
此代码为输入 5^2
打印 undefined
而不是预期的 25
。
可以使用 a closure,并将输入传递给作为点击侦听器返回的函数。
const input = document.querySelector('input');
const button = document.querySelector('button');
button.addEventListener('click', evaluat(input), false);
function evaluat(input) {
return function () {
const str = input.value.replace('^', '**');
console.log(eval(str));
}
}
<input></input>
<p><button>Replace</button></p>
建议您为您的元素指定一个唯一的 ID 以避免歧义。
function evaluat(expr) {
let val = document.getElementById('parsed').value.replace('^', '**');
console.log(eval(val));
}
<input id="parsed"></input>
<p><button onclick="evaluat()">Replace</button></p>
假设您以空输入开始您的页面,parsed
变量已经计算为 ''
。在你的 evaluat
(应该是 evaluate
)函数中,你还没有再次检索到 document.querySelector('input').value
的值,所以函数 eval
ed 是一个空字符串,这就是为什么它记录 undefined
.
您需要将函数更改为...
function evaluat() {
console.log(
eval(document.querySelector('input').value.replace(/\^/,'**'))
);
}
您不必将任何参数传递给此函数,因为它会在每次执行时查询 DOM。
顺便说一句,请注意 eval()
是危险的。避免使用它。
因为 onclick
是一个 javascript 函数,你可以像这样在里面使用 javascript :
function evaluat(expr){
console.log(eval(expr));
}
<input></input>
<p><button onclick="evaluat(document.querySelector('input').value.replace('/\^/','**'))">Replace</button></p>
但是您不能在 html 中使用 javascript 存储的变量。但是你可以使用returns你想要的值的函数:
function evaluat(expr){
console.log(eval(expr));
}
var parse = function () {
return document.querySelector('input').value.replace('/\^/','**');
};
var parse2 = document.querySelector('input').value.replace('/\^/','**')
<input></input>
<p><button onclick="evaluat(parse())">Replace</button></p> <!-- OK -->
<p><button onclick="evaluat(parse2)">Replace</button></p> <!-- undefined -->
我对如何将变量传递到 onclick
属性内的函数调用有疑问。 这实际上是一种不好的做法,但我仍然想知道以备不时之需。
例如:
let parsed = document.querySelector('input').value.replace('/\^/','**');
function evaluat(expr){
console.log(eval(expr));
}
<input></input>
<p><button onclick="evaluat(parsed)">Compute</button></p>
此代码为输入 5^2
打印 undefined
而不是预期的 25
。
可以使用 a closure,并将输入传递给作为点击侦听器返回的函数。
const input = document.querySelector('input');
const button = document.querySelector('button');
button.addEventListener('click', evaluat(input), false);
function evaluat(input) {
return function () {
const str = input.value.replace('^', '**');
console.log(eval(str));
}
}
<input></input>
<p><button>Replace</button></p>
建议您为您的元素指定一个唯一的 ID 以避免歧义。
function evaluat(expr) {
let val = document.getElementById('parsed').value.replace('^', '**');
console.log(eval(val));
}
<input id="parsed"></input>
<p><button onclick="evaluat()">Replace</button></p>
假设您以空输入开始您的页面,parsed
变量已经计算为 ''
。在你的 evaluat
(应该是 evaluate
)函数中,你还没有再次检索到 document.querySelector('input').value
的值,所以函数 eval
ed 是一个空字符串,这就是为什么它记录 undefined
.
您需要将函数更改为...
function evaluat() {
console.log(
eval(document.querySelector('input').value.replace(/\^/,'**'))
);
}
您不必将任何参数传递给此函数,因为它会在每次执行时查询 DOM。
顺便说一句,请注意 eval()
是危险的。避免使用它。
因为 onclick
是一个 javascript 函数,你可以像这样在里面使用 javascript :
function evaluat(expr){
console.log(eval(expr));
}
<input></input>
<p><button onclick="evaluat(document.querySelector('input').value.replace('/\^/','**'))">Replace</button></p>
但是您不能在 html 中使用 javascript 存储的变量。但是你可以使用returns你想要的值的函数:
function evaluat(expr){
console.log(eval(expr));
}
var parse = function () {
return document.querySelector('input').value.replace('/\^/','**');
};
var parse2 = document.querySelector('input').value.replace('/\^/','**')
<input></input>
<p><button onclick="evaluat(parse())">Replace</button></p> <!-- OK -->
<p><button onclick="evaluat(parse2)">Replace</button></p> <!-- undefined -->