2013-08-28 71 views
0

我想創建一個表單,它需要生日,將所有數字相加,然後使用結果查詢數據庫並顯示結果。總和必須是1到22之間的數字,以便從數據庫中進行選擇。JavaScript數學到PHP頁面ID

我有表單按鈕來觸發函數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> 

回答

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,以便它不會繼續實際提交表單。這就是它之前直接發送月,日,年值的原因。

這會給出與您的代碼意圖不同的結果,但也許這就足夠了。

(編輯:用的document.getElementById( 「月」)所取代lpn.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; 
} 
+0

我試過了,但它仍然只是用表單輸入的值重寫URL。 – SyrupandSass

+0

lpn.month.value等未正確獲取表單值。更新。 – Matt

+0

感謝您幫助馬特。但它仍然無法正常工作。我可能應該堅持使用PHP。並不是說我知道如何在PHP中做到這一點,但是這個JavaScript正在讓我失望。 – SyrupandSass