2013-05-02 53 views
0

請參考我的小提琴here。我有一個包含動態行的表格,每個表格都包含一個複選框,其中包含變量ID id="monitor_'+rowID+'",其中rowID是一個全局變量,聲明爲在函數addText()內部沒有關鍵字var。我試圖使用.each(function(){});來遍歷行,但它似乎不工作。如何遍歷幾個變量ID?

我的意圖是查看每行中的複選框是否被選中。如果是,將調用功能monitoring。 下面是函數:

function monitoring() { 
$('#test').append("checked"); 
fbType = $('td.nth(2)', $(this)).text(); 
fbNum = $('td.nth(3)', $(this)).text(); 
$('#test').append(fbType + fbNum); 

$.post('/request', { 
    inputText: fbNum, 
    key_pressed: fbType.toString() 
}).done(function (reply) { 
    if (reply == "on") { 
     $('#test').append("on "); 
    } else { 
     $('#test').append("off "); 
    } 
}); 

}

您可以添加行,但是選擇一個選項,並增加一個號碼,然後按按鈕「添加」。第一個.append("checked")是爲了確保我調用函數,但奇怪的是,它只顯示一次,即使我有幾個複選框,我檢查了所有。

另一個問題,我不能顯示如下內容:

fbType = $('td.nth(2)', $(this)).html(); 
fbNum = $('td.nth(3)', $(this)).html(); 

爲什麼會這樣呢?這是至關重要的,因爲你可以看到,我會將這些數據發佈到python函數中...

請告訴我我的代碼出現了什麼問題,以及我應該怎麼做。

回答

2

你可以改變的元素在你的每個循環。 而我已經改變了第n個選擇器,試圖獲取值。 在你的例子中,你嘗試了一個jQuery函數作爲CSS選擇器。

$('#monitor').click(function() { 
    $('#status_table tr [id^="monitor_"]:checked').each(function() { 
    monitoring($(this).parents('tr')); 
    }); 
}); 

function monitoring($row) { 
    $('#test').append("checked"); 
    fbType = $row.find('td:nth-child(2)').html(); 
    fbNum = $row.find('td:nth-child(3)').html(); 
    $('#test').append(fbType + fbNum); 
} 
+0

啊,所以它會遍歷所有行?我真的不知道.each()會如何迭代,儘管我已經多次閱讀了關於它的jquery API。 – yvonnezoe 2013-05-02 09:05:28

+0

這隻會遍歷具有以'monitor_'開頭的ID的元素,並且它會在您的案例中找到所有複選框,因爲它們都適用於此選擇器 – Tomas 2013-05-02 09:07:39

+0

哦,謝謝!但我怎麼能確保它通過所有選中的複選框循環並調用函數?它無法顯示任何內容,並且無法排除故障。 :( – yvonnezoe 2013-05-02 09:12:25

1

你有一個算法問題就在這裏:

$('#monitor').click(function() { 
    $('#status_table tr').each(function() { 
     $check = $('#status_table tr #monitor_' + rowID) 
     if ($check.is(':checked')) { 
      monitoring(); 
     } 
    }); 
}); 

而正如你說這是一個全局變量,它是那麼您正在使用ROWID當您使用在最後ROWID你有。每()(如果有是3行,rowID = 3)。

你可以嘗試解釋你想要與那些線做什麼:

fbType = $('td.nth(2)', $(this)).html(); 
fbNum = $('td.nth(3)', $(this)).html(); 
+0

所以我的rowID永遠不會是'rowID = type + textInput;'?對於fbType和fbNum,我試圖在具有複選框的行中獲取這2列的值。你可以玩上面的小提琴。 :) – yvonnezoe 2013-05-02 08:58:09

+0

這裏是一個worling小提琴:http://jsfiddle.net/pbuyR/ 我改變了: - 索引現在在開始聲明,然後只是增加(更高性能,你不必添加空)。編輯:剛纔看到托馬斯分叉,即使你去我的代碼,你應該明確地繼續前進,並按照他的方式清理你的代碼。 - '$('#monitor')中的'check'點擊()'已經改變 - 我改變了fbType和fbNum,以便它們現在被正確填充 如果您有任何問題隨時問。 – MisterJ 2013-05-02 09:44:31

+0

哦呃,我認爲你貼錯了小提琴。 (我沒有看到你提到的變化):( – yvonnezoe 2013-05-03 01:47:32