0

我正在尝试创建一个表格,该表格包含生日,将所有数字相加,然后使用结果来查询数据库并显示结果。总和必须是 1 到 22 之间的数字,才能从数据库中进行选择。

我有表单按钮来触发函数 getBirthCard,但是单击它只是将表单输入的值吐到 URL 中。

谁能给我一个想法,什么没有正确编码才能使其正常工作?谢谢,麻烦您了!

<script language="JavaScript" type="text/javascript">

function getBirthCard() {
    var month = lpn.month.value;
    var day = lpn.day.value;
    var Byear = lpn.year.value;
    var century = Byear.substring (0,2);
    var year = Byear - century*100;
    sum = parseInt(day) + parseInt(month) + parseInt(century) + parseInt(year);

    reduce();

    results(sum);
 }

 function reduce(){

 var first; // first one or two digits
 var last; // last digit

 var sumStr = "" + sum;

 // while number is bigger than 22
 while (sum > 22) {
    // if it is a three digit number
    if (sum > 99) {
        first= sumStr.substring(0,2);
        last= sumStr.substring(2);
        sum = parseInt(first) + parseInt(last);
        sumStr = "" + sum;

    // if it is a two digit number
    } else {
        first= sumStr.substring(0,1);
        last= sumStr.substring(1);
        sum = parseInt(first) + parseInt(last);
        sumStr = "" + sum;
    }
 } // end while

} // end reduce   


}
function results()
    {
    window.location.assign("http://arcanabazaar.com/results.php?id=' + sum")

    }

</script>

这是我正在使用的表格:

<form class="form-inline" action="" name="lpn" method="GET">
<input type="text" id="month" name="month" placeholder="08">
<input type="text" id="day" name="day" placeholder="20">
<input type="text" id="year" name="year" placeholder="1987">
<br><br>
<button type="submit" onclick="getBirthCard()" class="btn btn-large">What's My Card?</button>
</form>
4

1 回答 1

2

我猜你是根据生日数字从大奥秘中选择一张卡片。如果您不太关心这是如何计算的,这里有一个使用模运算的快速方法:

function getBirthCard() {
    var month = document.getElementById("month").value;
    var day = document.getElementById("day").value;
    var year = document.getElementById("year").value;
    var sum = parseInt(month) + parseInt(day) + parseInt(year);

    var card = sum % 22 + 1; // this is always from 1 to 22

    window.location.assign('http://arcanabazaar.com/results.php?id=' + card);
    return false;
 }

调用它的按钮必须编码为:

<button type="submit" onclick="return getBirthCard();" class="btn btn-large">What's My Card?</button>

OnClick 事件必须返回 false,以便它不会继续实际提交表单。这就是它之前直接发送月、日、年值的原因。

这将给出与您的代码预期不同的结果,但这可能就足够了。

(编辑:将 lpn.month.value 替换为 document.getElementById("month").value 等)(EDIT2:将 false 返回给 onclick 调用者。)

EDIT3:这是重复将数字相加直到它们小于或等于 22 的代码:

function getBirthCard() {
    var month = document.getElementById("month").value;
    var day = document.getElementById("day").value;
    var year = document.getElementById("year").value;
    var card = getCardFromDate( month, day, year );
    window.location.assign('http://arcanabazaar.com/results.php?id=' + card);
    return false;
}

function getCardFromDate( month, day, year )
{
  var sum = parseInt('' + month + day + year);
  while( 22 < sum )
  {
    var digits = (''+sum).split('');
    sum = 0;
    for( var i=0 ; i<digits.length ; ++i ) sum += parseInt(digits[i]);
  }
  return sum;
}
于 2013-08-28T00:36:10.260 回答