2014-05-23 53 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]; }