我想构建一个提示功能,该提示功能将提示用户输入一个值,然后返回该值。
为什么我在强制模式下输入然后输入一个值,为什么此代码返回 null ?谁能做到?
function UserInput(text, defaultText, mandantory) {
if (typeof defaultText === 'undefined')
defaultText = '';
if (typeof mandantory === 'undefined')
return prompt(text, defaultText);
else {
var a = prompt(text, defaultText);
if (a === '') {
return UserInput(text, defaultText, mandantory);
} else {
return null;
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
</body>
</html>
注意:必须从onclick =“ ...”调用它。
谢谢, 德扬
答案 0 :(得分:1)
它返回null
是因为如果return null
是a
以外的其他事物,则您称自己为''
,则必须返回a
。
function UserInput(text, defaultText, mandantory) {
if (typeof defaultText === 'undefined')
defaultText = '';
if (typeof mandantory === 'undefined')
return prompt(text, defaultText);
else {
var a = prompt(text, defaultText);
if (a === '') {
return UserInput(text, defaultText, mandantory);
} else {
return a;
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
</body>
</html>
但是我会在这里使用while做while循环而不是递归:
function UserInput(text, defaultText, mandantory) {
if (typeof defaultText === 'undefined')
defaultText = '';
var a
do {
// the first prompt will always be called
a = prompt(text, defaultText)
// repeat the loop while a === '' and mandantory !== 'undefined'
} while (mandantory !== 'undefined' && a === '')
return a;
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
</body>
</html>
答案 1 :(得分:1)
之所以返回null
,是因为如果输入了值,则您将在else
中返回它。当else
与a
不同时,您需要在上一个null
中返回a
而不是''
:
if (a === '') {
return UserInput(text, defaultText, mandantory);
} else {
return a;
}
注意:
要检查是否定义了变量,可以只使用if(mandatory)
而不是编写if(typeof mandantory === 'undefined')
。
演示:
function UserInput(text, defaultText, mandantory) {
if (typeof defaultText === 'undefined')
defaultText = '';
if (mandantory)
return prompt(text, defaultText);
else {
var a = prompt(text, defaultText);
if (a === '') {
return UserInput(text, defaultText, mandantory);
} else {
return a;
}
}
}
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<button onclick="alert(UserInput('prompt with input', ''))">prompt with input</button><br/>
<button onclick="alert(UserInput('prompt with mandantory input', '', 0))">prompt with mandantory input</button>
</body>
</html>
答案 2 :(得分:0)
在您的代码段中:
a
不为零,则始终返回null
,而应返回return a
else
条语句,则不需要return
分支n
您可以编写如下函数:
const UserInput = async (text, defaultText = '', mandatory = false) => {
const result = await prompt(text, defaultText);
if (!result && mandatory) {
console.log('User did not enter a correct value, try again');
return UserInput(text, defaultText, mandatory);
}
console.log(`Returning Value: "${result}"`);
return result;
};
document
.getElementById('test')
.addEventListener('click', () => UserInput('Say Something', '', true))
;
<button id="test">Try</button>
答案 3 :(得分:0)
您可以这样做
data <- read.table(text = "INr FNr TM I1 I2
1 1 B2 1598,45 0,14
2 1 B2 930,40 0,11
3 1 B2 107,86 0,04
4 1 B2 881,09 0,11
7 1 B3 2201,98 0,15
8 1 B3 161,30 0,04
9 1 B3 1208,14 0,17
4 2 B3 831,75 0,12
5 2 B3 1027,41 0,14
7 2 B3 2052,16 0,15
8 2 B3 159,63 0,05
9 2 B4 1111,49 0,16
10 2 B4 1312,15 0,12
1 3 B4 863,79 0,10
2 3 B4 104,06 0,04
3 3 B4 816,02 0,11
4 3 B4 1053,02 0,14
5 3 B5 132,32 0,03
6 3 B5 2059,03 0,14
7 3 B5 153,49 0,04
8 3 B5 1118,69 0,15
9 3 B5 1632,66 0,18
10 3 B5 1302,15 0,12", header = T)
function UserInput(text, defaultText, mandantory) {
if (typeof defaultText === 'undefined')
defaultText = '';
if (typeof mandantory === 'undefined')
return prompt(text, defaultText);
else {
var a = prompt(text, defaultText);
if (a === '') {
return UserInput(text, defaultText, mandantory);
} else if (a !== null) {
return a;
} else {
return null;
}
}
}