创建动态选择(下拉列表)列表的最佳方法是什么?

时间:2009-02-27 15:25:11

标签: javascript jquery list drop-down-menu selectlist

我正在使用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>";

4 个答案:

答案 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可以正常工作。