2

私はjQueryとjqGridを使用しています。

行ごとに1つずつ、選択リストに動的にデータを入力しようとしています。それにクリックイベントを追加する必要があります。選択リストにデータが入力されているときに、選択したいアイテムのインデックスを取得し、すべてのアイテムを追加した後、選択したアイテムを設定しようとしています。

私はもう試した

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

私が行った方法は、最初の例にあります-addOptionにjQuery APIを使用する代わりに、次のように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 では、for ループを手動で作成する代わりに、 each ループを使用できます。

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 の Validatorを使用して $("#hoursBx") (現在の行のテキスト ボックス) の値を確認しています。

onClick を追加すると機能します。

于 2009-02-27T20:26:29.597 に答える