我有一个带有jQuery数据表的Web表单。单击特定行时,我得到行数据,需要设置页面上控件的值。
我可以获取行值,我设置断点并且可以看到所获取的行值是正确的但由于某种原因控件值没有设置(例如,标签的文本)。这就是我所拥有的(淡化版本):
$(document).ready(function () {
var zTable = $("#fcTable").DataTable({
"bServerSide": true,
"bDestroy": true,
"sAjaxSource": "../fc.asmx/GetItems",
"bJQueryUI": true,
"fnServerParams": function (aoData) {
aoData.push({ "name": "FacilityID", "value": $('#<%= ddlFacility.ClientID %> option:selected').val() });
},
"fnServerData": function (sSource, aoData, fnCallback) {
$.ajax({
"dataType": 'json',
"contentType": "application/json; charset=utf-8",
"type": "GET",
"url": sSource,
"data": aoData,
"success":
function (msg) {
var json = jQuery.parseJSON(msg.d);
fnCallback(json);
$("#fcTable").show();
},
error: function (xhr, textStatus, error) {
if (typeof console == "object") {
alert(xhr.status + "," + xhr.responseText + "," + textStatus + "," + error);
}
}
});
}
});
$('#fcTable tbody').on('click', 'tr', function () {
var currentRowData = zTable.row(this).data();
processRow(currentRowData);
});
})
function processRow(row) {
debugger
$("#<%= rblResp.ClientID %> input[type=radio]").prop('checked', false);
$("#<%= cblResp.ClientID %> input[type=checkbox]").prop('checked', false);
var sQuestion = row[2];
// None of these sets the label's text
$('#<%= lblQuestion.ClientID %>').val(sQuestion);
$('#<%= lblQuestion.ClientID %>').innerHTML = sQuestion;
}
更新
我可以使用
让它工作$('#<%= lblQuestion.ClientID %>')[0].innerHTML = sQuestion;
即。添加数组索引[0]。
但这是正确的做法吗?
答案 0 :(得分:0)
问题是 $(&#39;#&lt;%= lblQuestion.ClientID%&gt;&#39;) 会返回一个jQuery对象和innerHTML是标准的JavaScript,并且在jQuery对象上无法正常工作。
对象末尾的 [0] 为您提供DOM节点(对象的第一个属性),这是innerHTML需要的。
在纯jQuery中执行此操作的正确方法是:
$(&#39;#&lt;%= lblQuestion.ClientID%&gt;&#39;)。html(sQuestion);
仅供参考,您可以在输入中设置 ClientIDMode =&#34;静态&#34; ,以避免asp.Net覆盖您在HTML中提供的ID因此,请避免使用JavaScript中的所有&lt;%= ...内容,如果您希望将JavaScript拆分为自己的文件,那么效果会更好。