2014-05-23 50 views
0

嘗試將我的數獨求解算法(現在可以工作!)轉換爲javascript,並嘗試從頁面上的一系列下拉列表中檢索初始值。在下拉菜單的基本格式如下:使用javascript從表單中檢索值

<form action=""> 
    <table> 
     <tr> 
      <td> 
       <select id="sudoku00"> 
        <option value=0></option> 
        <option value=1>1</option> 
        ... 
       </select> 
      </td> 
      ... 
     </tr> 
     ... 
    </table> 
</form> 

我使用嘗試檢索這些到一個數組如下的JavaScript,但似乎並沒有工作:

var grid=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]...] 
for (var i=0; i<9; i++){ 
    for (var j=0; j<9; j++){ 
     var current=document.getElementById("sudokuCell"+i.string+j.string); 
     grid[i][j]=current.options[current.selectedIndex].value; 
    } 
} 

它最終將第一個單元格設置爲未定義,其餘的爲0,當沒有任何下拉列表從空白改變時,當我將下拉列表更改爲空白以外的任何內容時,較小數組中的每個條目都變得不確定。 此外,如果任何這是不好的形式,請讓我知道,我仍然很新的JavaScript。

編輯:這是整件事。對不起身份證,抱歉,從內存中打字,錯過了。 http://jsfiddle.net/2Me7E/

+0

我個人很喜歡suduko解算器,只是因爲它讓我想起了一個N皇后問題。 :) 另一方面,你似乎有問題:'string'需要'string()',並確保所有的選擇ID都是正確的。如果你想我可以讓你成爲小提琴 – Fallenreaper

+0

'i.string'不會做任何事情,除非你在變量上定義一個'string()'函數。如果您認爲您需要將'i'中的數字轉換爲Java或C#中的字符串,那麼您將使用'ToString()',那麼您不必在JS中這樣做。如果你用串連接它,JS會自動轉換數字。 – Val

回答

1

i.string應該是i.toString(),你的選擇是尋找ID sudokuCellxx當您選擇列表中的ID是sudokuxx

0

這是我剛剛在約4分鐘內寫出的答案。

http://jsfiddle.net/69b5p/

//make the grid 
var $t = $("<table />"), 
    $r = $("<tr />"), 
    $c = $("<td />"), 
    $sel = $("<select />"), 
    $opt = $("<option />"), 
    result = $t.clone(), 
    selection = $sel.clone(); 
for (var i = 0; i<9; i++){ 
    selection.append($opt.clone().val(i+1).text(i+1)); 
} 
for (var i = 9; i; i--){ 
    var row = $r.clone(); 
    for (var j = 9; j;j--){ 
     row.append($c.clone().append(selection.clone())); 
    } 
    result.append(row); 
} 


$("body").append(result); 

,然後你可以再補充一些CSS:

table, tr, td{border: solid 1px black;} 

編輯:調整這個小提琴(http://jsfiddle.net/X4fF3/),使得您的ID的分配,並用表格把它包裝。

編輯2:http://jsfiddle.net/X4fF3/1/按從左到右的順序給出所有數字的數組。

有了第二個編輯,你可以很容易地找到屬於這裏的一切,做一樣的東西:

9 * R + C%9,其中R是行數,C是列。 (這是編程所以它實際上是0-8爲他們每個人:)

例如:

function get(R,C){ return array[9*R + C%9]; }