我正在使用jQuery和jqGrid。
我正在尝试动态填充选择列表,每行一个,我需要向其添加一个click事件。当我正在填充选择列表时,我抓住我想要选择的项目的索引,然后在添加所有项目后,我正在尝试设置所选项目。
我试过
$("#taskList")[0].selectedIndex = taskIndex;
$("#taskList").selectOptions(taskIndex, true);
$("#taskList").val(1); //Tried to see if I could select any index and no luck.
$("#taskList option[value=" + taskIndex + "]").attr("selected", true);
所以这意味着我可能错误地填充了列表...
var taskList = document.createElement("select");
var taskIndex = 0;
for (var i = 0; i < result.TaskTypes.length; i++) {
$(taskList).addOption(result.TaskTypes[i].TaskId, result.TaskTypes[i].TaskName);
if (result.TaskTypes[i].TaskName == rowData.TaskType)
taskIndex = i;
}
有更好的方法吗?
我尝试了这个但是我无法将click事件添加到它。选择了正确的项目。
var taskList = "<select name='taskList' Enabled='true'>";
for (var i = 0; i < result.TaskTypes.length; i++) {
if (result.TaskTypes[i].TaskName == rowData.TaskType)
taskList += "<option selected> " + result.TaskTypes[i].TaskName + "</option>";
else
taskList += "<option>" + result.TaskTypes[i].TaskName + "</option>";
}
taskList += "</select>";
答案 0 :(得分:4)
我的方式就是你的第一个例子 - 而不是使用jQuery API for addOption,使用DOM API,如下所示:
var option = document.createElement("option");
option.innerHTML = result.TaskTypes[i].TaskName;
option.value = result.TaskTypes[i].TaskId;
option.onclick = myClickHandler;
taskList.add(option, null);
然后在循环之后你可以使用:
taskList.selectedIndex = taskIndex;
将选择列表定位到所需的默认选择。
我没有广泛使用jQuery,但我认为不要忽视DOM API是一个好主意 - 它通常不如jQuery和其他库提供的快捷方式那么方便,但是这些扩展了DOM功能而不应该改为DOM。
答案 1 :(得分:2)
属于“更好的方式”类别,JQuery允许您使用each loop而不是手动创建for循环。
jQuery.each(result.TaskTypes, function(i, val) {
$("#" + i).append(document.createTextNode(" - " + val));
});
答案 2 :(得分:2)
您可以像这样设置所选索引:
$("#taskList").selectedIndex = taskIndex;
答案 3 :(得分:0)
得到它 - 8小时后坚固。
var taskList = "<select name='taskList' Enabled='true' onClick='$(\"#hoursBx\").valid()' >";
for (var i = 0; i < result.TaskTypes.length; i++) {
if (result.TaskTypes[i].TaskName == rowData.TaskType)
taskList += "<option selected> " + result.TaskTypes[i].TaskName + "</option>";
else
taskList += "<option>" + result.TaskTypes[i].TaskName + "</option>";
}
taskList += "</select>";
我正在使用jQuery's Validator来验证$(“#hoursBx”)(当前行中的文本框)中的值。
添加onClick可以正常工作。