使用 jQuery 语法中的变量的 eval() 方法不起作用
eval() method, with a variable in jQuery syntax, is not working
我正在尝试 运行 具有尽可能小的 JavaScript 代码位的计算器。我正在使用 jQuery 来进一步最小化我的脚本部分。
但是我的 eval()
方法不起作用,尽管它旁边的 alert(executed)
工作正常!我做错了什么?看看我到目前为止的尝试!
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0">
<style>
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
</style>
</head>
<body>
<p>
Answer will be shown here:
</p>
<br></br><br></br>
<table style="background:black; padding:2vw; width:60vw; margin-left:20vw;">
<th>
<div id="display" style="width:56vw; height:15vw; background:skyblue; font-weight:bolder; font-size:5vw; color:red;"></div>
</th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
<script>
$(function() {
$("input.inp").on("click", function() {
if ($(this).val() != "ans") {
var solve = $("#display").append($(this).val());
}
if ($(this).val() == "ans") {
var result = eval(solve);
$("p").html(eval(result));
alert("executed");
}
});
});
</script>
</body>
</html>
Edit: There were some syntax error in this code, which I hope is now fixed.
您需要获取 #display
的值,然后将其传递给 eval
函数以获得所需的答案。
演示代码 :
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0">
<style>
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
</style>
<p>
Answer will be shown here: <span></span>
</p>
<br></br><br></br>
<table style="background:black; padding:2vw; wclassth:60vw; margin-left:20vw;">
<th>
<div id="display" style="wclassth:56vw; height:15vw; background:skyblue; font-weight:bolder; font-size:5vw; color:red;"></div>
</th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
<script>
$(function() {
$("input.inp").on("click", function() {
if ($(this).val() != "ans") {
$("#display").append($(this).val());//append new value
}
if ($(this).val() == "ans") {
var solve = $("#display").text();//get value from display
var result = eval(solve);//eval
console.log(result)
$("span").html(result);
alert("executed");
}
});
});
</script>
parseInt()
行parseInt($("#display").append($(this).val());
不会 return 你认为它会 return,parseInt()
会尝试解析 .append()
的结果,这不是数值,这就是我认为你可以实现的方式它:
也是一个安全提示,请尽量避免使用eval()
,请查看这个:
Never use eval
$(function () {
$("input.inp").on("click", function () {
let solv = $(this).val();
if (solv != "ans") {
$("#display").append(solv);
}
if (solv == "ans") {
let solve = $("#display").text();
const result = calculateResult(solve);
$("#ans").html(result);
}
});
});
function calculateResult(js) {
return Function('"use strict";return (' + js + ")")();
}
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0" />
</head>
<body>
<p>
Answer will be shown here: <span id='ans'></span>
</p>
<table style="background: black; padding: 2vw; wclassth: 60vw; margin-left: 20vw;">
<th><div id="display" style="wclassth: 56vw; height: 15vw; background: skyblue; font-weight: bolder; font-size: 5vw; color: red;"></div></th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
</body>
</html>
我正在尝试 运行 具有尽可能小的 JavaScript 代码位的计算器。我正在使用 jQuery 来进一步最小化我的脚本部分。
但是我的 eval()
方法不起作用,尽管它旁边的 alert(executed)
工作正常!我做错了什么?看看我到目前为止的尝试!
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0">
<style>
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
</style>
</head>
<body>
<p>
Answer will be shown here:
</p>
<br></br><br></br>
<table style="background:black; padding:2vw; width:60vw; margin-left:20vw;">
<th>
<div id="display" style="width:56vw; height:15vw; background:skyblue; font-weight:bolder; font-size:5vw; color:red;"></div>
</th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
<script>
$(function() {
$("input.inp").on("click", function() {
if ($(this).val() != "ans") {
var solve = $("#display").append($(this).val());
}
if ($(this).val() == "ans") {
var result = eval(solve);
$("p").html(eval(result));
alert("executed");
}
});
});
</script>
</body>
</html>
Edit: There were some syntax error in this code, which I hope is now fixed.
您需要获取 #display
的值,然后将其传递给 eval
函数以获得所需的答案。
演示代码 :
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0">
<style>
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
</style>
<p>
Answer will be shown here: <span></span>
</p>
<br></br><br></br>
<table style="background:black; padding:2vw; wclassth:60vw; margin-left:20vw;">
<th>
<div id="display" style="wclassth:56vw; height:15vw; background:skyblue; font-weight:bolder; font-size:5vw; color:red;"></div>
</th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
<script>
$(function() {
$("input.inp").on("click", function() {
if ($(this).val() != "ans") {
$("#display").append($(this).val());//append new value
}
if ($(this).val() == "ans") {
var solve = $("#display").text();//get value from display
var result = eval(solve);//eval
console.log(result)
$("span").html(result);
alert("executed");
}
});
});
</script>
parseInt()
行parseInt($("#display").append($(this).val());
不会 return 你认为它会 return,parseInt()
会尝试解析 .append()
的结果,这不是数值,这就是我认为你可以实现的方式它:
也是一个安全提示,请尽量避免使用eval()
,请查看这个:
Never use eval
$(function () {
$("input.inp").on("click", function () {
let solv = $(this).val();
if (solv != "ans") {
$("#display").append(solv);
}
if (solv == "ans") {
let solve = $("#display").text();
const result = calculateResult(solve);
$("#ans").html(result);
}
});
});
function calculateResult(js) {
return Function('"use strict";return (' + js + ")")();
}
.inp {
font-weight: bolder;
font-size: 5vw;
width: 13vw;
height: 13vw;
margin-bottom: 2vw;
margin-top: 2vw;
}
input:hover {
color: red;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<meta charset="UTF-8" />
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.js"></script>
<meta name="viewport" content="wclassth=device-wclassth, initial-scale=1.0" />
</head>
<body>
<p>
Answer will be shown here: <span id='ans'></span>
</p>
<table style="background: black; padding: 2vw; wclassth: 60vw; margin-left: 20vw;">
<th><div id="display" style="wclassth: 56vw; height: 15vw; background: skyblue; font-weight: bolder; font-size: 5vw; color: red;"></div></th>
<tr>
<td>
<input class="inp" type="button" value="1" />
<input class="inp" type="button" value="2" />
<input class="inp" type="button" value="3" />
<input class="inp" type="button" value="+" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="4" />
<input class="inp" type="button" value="5" />
<input class="inp" type="button" value="6" />
<input class="inp" type="button" value="-" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="7" />
<input class="inp" type="button" value="8" />
<input class="inp" type="button" value="9" />
<input class="inp" type="button" value="*" />
</td>
</tr>
<tr>
<td>
<input class="inp" type="button" value="." />
<input class="inp" type="button" value="0" />
<input class="inp" type="button" value="/" />
<input class="inp" type="button" value="ans" />
</td>
</tr>
</table>
</body>
</html>