名前、コード、電子メール(ユーザーに表示されないID列)の3つの列を持つBranchesというDataTableがあります。元々は編集ボタンが上にあり、行をクリックした後でユーザーがボタンをクリックすると、フィールドが入力されたダイアログボックスが開き、編集できます。しかし、今度は、各行に独自の編集ボタンがあるように変更する必要があるため、最初に行をクリックする必要はありません。DataTableの行ごとに編集ボタンがあり、データを渡すことができません
これでDataTableの各行に[編集]ボタンが表示されましたが、インデックス番号以外にその特定の行のデータを渡すことはできません。コードの関連ブロックは(私が何かを逃した場合を除き、私が持っている場合は、私に教えてください)以下のとおりです。
var txtName2 = $("#txtName2"); //For Update
var txtCode2 = $("#txtCode2");
var txtEmail2 = $("#txtEmail2");
var dialog;
var tblBranch = $("#tblBranches");
var branchList;
var selectedIndex;
branchList = response.branches;
var data = { "aaData": [] };
$.each(response.branches, function (i, item) {
data.aaData.push({
"id": item.id,
"name": item.name,
"code": item.code,
"email": item.email,
"action": "<button> class='btnUpdate' type='button' onClick='testUpdateButton(" + i + ")'</button>"
});
});
function testUpdateButton(index, name, code, email) {
//alert(index);
selectedIndex = tblBranch.row(this).index();
var selectedName = tblBranch.row(index).name;
var selectedCode = tblBranch.row(index).code;
var selectedEmail = tblBranch.row(index).email;
//alert(name);
onBtnUpdateClicked(index, name, code, email);
}
function onBtnUpdateClicked(index, name, code, email) {
if (branchList != null && branchList.length > 0) {
var selectedItem = branchList[selectedIndex];
txtName2.val(selectedItem.name);
txtCode2.val(selectedItem.code);
txtEmail2.val(selectedItem.email);
dialog = $("#dialog-form-update").dialog("open");
}
}
私は唯一の「i」はボタンではなく、名前、コードまたは電子メールで、インデックス番号を渡した場合testUpdateButtonのアラート(index)には、選択した行の正しいインデックス番号が表示されます。したがって、インデックス番号は取得できることを確認しますが、他の3つのカラムは表示されません(アラート(名前)は何も表示されません)。
だから私は、このようなようにボタンで4つのすべてのフィールドを渡して試してみた:
"action": "<button> class='btnUpdate' type='button' onClick='testUpdateButton(" + i + ", " + item.name + ", " + item.code + ", " + item.email + ")'</button>"
が、それは私だけのエラー与える:私はページを閲覧するとき:「引数リストの後に行方不明)キャッチされないでSyntaxErrorを」クロム。私はブラケットがどこになければならないのか分からない。
基本的にはインデックス番号を取得できますが、対応する名前、コード、電子メールを取得するためには使用できません。
参考までに、これまでのソリューションに最も近い機能があります。これは、すべての行データを渡し、行自体をクリックするたびに入力フィールドが入力された編集ダイアログボックスを読み込みます。私はonBtnUpdateClicked関数を追加したにすぎませんでしたが、以前の "Click on row first"バージョンから変更されました。理想的ではありませんが、少なくともそれはすべきことをしました。
$("#tblBranches tbody").on('click', 'tr', function() {
selectedIndex = tblBranch.row(this).index();
onBtnUpdateClicked();
});
ご協力いただきまして誠にありがとうございます。
こんにちは、ご協力いただきありがとうございます。それに応じてコードを使用して変更しましたが、まだ問題があります。ダイアログボックスが表示されますが、何らかの理由で最初の行のデータしか取得されず、データは何とか9行目のデータとなります。他の行についてはデータは取得されません。あなたのFiddleコードに従っていますが、私はtestUpdateButton関数に何か問題があると思います。コードを取得するための余分な行を除いてあなたのものと同じで、eq番号は0〜2です。 – Alycus
@Alycusあなたのデータテーブル構造で更新されたコードを表示できますか? –
ここに、私は以前投稿していないのは申し訳ありません:https://jsfiddle.net/071hc59s/1/ – Alycus