我有以下问题。警报allways返回undefined,但我知道它有一个值。我究竟做错了什么。我没有解决方案......
我正在使用JQUERY jquery-1.4.2.min.js
提前Tnx
$(document).ready(function(){
$('#generateButton').click(createIBAN);
});
function createIBAN(){
//---- First check if a bank has been selected,
//---- if not, then show error
if($('#selectBank').val()==''){
alert('Selecte a bank!');
}else{
var bankAccount = generateBankAccount();
alert(bankAccount);
}
return false;
}
function generateBankAccount(){
//---- Create "elfproef" bankaccount
var bankAccount = '';
//---- Set the amount of digits in a bankaccount
digitAmount = 9;
//---- Make random digitstring
for (var i = 0; i < digitAmount; i++) {
bankAccount += Math.floor(Math.random() * digitAmount);
}
//---- validate the string, if not "elf-proef"
if (elfProef(bankAccount)==false) {
//---- regenerate the string
generateBankAccount();
}else{
return bankAccount;
}
}
function elfProef(bankAccount) {
//---- set sum to 0 and start the for-loop for counting
var sum = 0;
for (var i = 0; i < digitAmount; i++) {
//---- for every digit multiply it times 9 - number
//---- of the digit and count it to the sum var
sum += bankAccount.charAt(i) * (digitAmount - i);
}
//---- Check if sum can be devided by 11 without having ##,##
if(sum % 11==0){
//---- return true means string is "elf-proef"
return true;
}else {
//---- String is not "elf-proef", try again
return false;
}
}
答案 0 :(得分:7)
本节:
if (elfProef(bankAccount)==false) {
//---- regenerate the string
generateBankAccount();
}else{
return bankAccount;
}
如果elfProef
返回false,则永远不会返回bankAccount。它只会运行generateBankAccount
,它将返回一个永远不会被使用的值。尝试将其更改为:
if (elfProef(bankAccount)==false) {
//---- regenerate the string
return generateBankAccount();
}else{
return bankAccount;
}
答案 1 :(得分:1)
我认为generateBankAccount是一个递归函数,对吗?如果这是真的,你忘了在嵌套调用前放置“return”。
答案 2 :(得分:0)
我认为您需要将generateBankAccount中的if else更改为如下所示:
if (elfProef(bankAccount)==false) {
//---- regenerate the string
return generateBankAccount();
}else{
return bankAccount;
}
否则你对generateBankAccount的递归调用将不会做任何事情。
答案 3 :(得分:0)
制作本:
if (elfProef(bankAccount)==false) {
//---- regenerate the string
generateBankAccount();
}
进入这个:
if (elfProef(bankAccount)==false) {
//---- regenerate the string
return generateBankAccount();
}
您可以考虑在不递归的情况下重写函数:
do {
bankAccount = '';
for (var i = 0; i < digitAmount; i++) {
bankAccount += Math.floor(Math.random() * digitAmount);
}
}
while (!elfProef(bankAccount));
return bankAccount;
使用循环使逻辑变得更加简单,并且在大量尝试后无法生成有效帐号的情况下,它不会占用堆栈空间。