Нужно ли вам делать что-то особенное при передаче динамически созданной строки в качестве идентификатора клиента для document.getElementById?
У меня есть элемент управления asp:gridview, который имеет столбец текстового поля и столбец флажка. Я добавил событие onclick к флажкам, чтобы установить значение текстового поля этой строки на максимальное значение всех отмеченных строк +1. Я передаю идентификаторы сетки и элементы управления выбранной строки. Я могу получитьElementByID в порядке для этих элементов управления, но когда я динамически создаю идентификаторы других элементов управления, я продолжаю получать нуль, хотя я знаю, что идентификаторы верны. Мой код ниже.
function SetPriority(cbID, tbID, gridID) {
var cb = document.getElementById(cbID);
if (cb.checked) {
var tb = document.getElementById(tbID);
var grid = document.getElementById(gridID);
var maxv = 0;
for (var i = 0; i < grid.rows.length; i++) {
var indexID = 102 + i;
var cbClientID = 'LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted_ct' + indexID + '_chkGroup';
var tbClientID = 'LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted_ct' + indexID + '_txtPriority';
console.log("row" + i);
//just for example of how it should be working
console.log(cbID);
var cbx = document.getElementById(cbID);
console.log(cbx);
//get row checkbox
console.log(cbClientID);
var thisCB = document.getElementById(cbClientID);
console.log(thisCB);
//get row textbox
var thisTB = document.getElementById(tbClientID);
console.log(thisTB);
if (thisCB) {
if (thisCB.type == "checkbox") {
if (thisCB.checked) {
if (thisTB.value > maxv)
maxv = thisTB.value;
}
}
}
}
tb.value = parseInt(maxv) + 1;
}
}
Вот как это отображается в консоли, где вы можете видеть, что идентификаторы для первой строки одинаковы. ">
Для тех, кто интересуется, как я вызываю функцию, я добавляю ее в флажок в элементе управления .net gridview в привязке данных строки. Это выглядит следующим образом:
<input id="LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted_ctl02_chkGroup" type="checkbox" name="LeaveInfo$pnlMain$wgbLeaveSummary$gridSubmitted$ctl02$chkGroup" onclick="javascript:SetPriority('LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted_ctl02_chkGroup','LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted_ctl02_txtPriority','LeaveInfo_pnlMain_wgbLeaveSummary_gridSubmitted');">
Код vb.net для добавления функции таков... (on-_RowDataBound)
Dim chk As CheckBox = CType(e.Row.FindControl("chkGroup"), CheckBox)
Dim tb As TextBox = CType(e.Row.FindControl("txtPriority"), TextBox)
chk.Attributes.Add("onclick", String.Format("javascript:SetPriority('{0}','{1}','{2}');", chk.ClientID, tb.ClientID, gridSubmitted.ClientID))
cbID === cbClientID
? Вроде похожи, а может и нет. - person Bergi   schedule 17.12.2012