2

我正在使用 jQuery 和 jqGrid。

我正在尝试动态填充一个选择列表,每行一个,我需要向它添加一个点击事件。当填充SELECT列表时,我获取所选项目的索引,然后在添加所有项目之后,我正在尝试设置所选项目。

我试过了

$("#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;
}

有没有更好的办法?

我试过这个,但我无法向它添加点击事件。虽然选择了正确的项目。

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

4 回答 4

4

我会这样做的方式是在您的第一个示例中 - 而不是使用 jQuery API 进行 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 .

于 2009-02-27T15:33:02.080 回答
2

属于“更好的方式”类别,JQuery 允许您使用each 循环而不是手动创建 for 循环。

jQuery.each(result.TaskTypes, function(i, val) {
      $("#" + i).append(document.createTextNode(" - " + val));
    });
于 2009-02-27T15:31:57.637 回答
2

您可以像这样设置选定的索引:

$("#taskList").selectedIndex = taskIndex;
于 2009-02-27T15:34:07.680 回答
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 的验证器来验证 $("#hoursBx") (当前行中的文本框)中的值。

添加 onClick 作品。

于 2009-02-27T20:26:29.597 回答