私は次のコードに基づいていますJSFiddle。ユーザが「余分なものを表示」リンクをクリックすると、より多くの情報が表示されます。テーブルに非表示の行を表示
私が抱えている問題は、テーブルの最下行以外のリンクをクリックすると隠れ要素が短時間表示されて閉じてしまうことです。
JavaScript文字列を使用してテーブルを作成しています。ここでIは、テーブルに行を追加するために使用するコードは、次のとおり
this.addRecordToTable = function(bet, index, id){
console.log(index);
console.log($.data(bet));
var butId = id.toString();
if (bet.bookies == null){
bet.bookies = "";
}
if (bet.bet == null){
bet.bet = "";
}
var newRow = `
<tr>
<td>${bet.date}</td>
<td>${bet.bookies}</td>
<td>${bet.profit}</td>
<td><button id=${butId}>Delete</button></td>
<td><a href=\"#\" id=\"show_${index}\">Show Extra</a></td>
</tr>
<tr>
<td colspan=\"5\">
<div id=\"extra_${index}\" style=\"display: none;\">
<br>hidden row
<br>hidden row
<br>hidden row
</div>
</td>
</tr>
`
console.log(newRow);
console.log("#"+butId);
$(newRow).appendTo($("#betTable"));
$("#"+butId).click(
function()
{
if (window.confirm("Are you sure you want to delete this record?"))
{
var rec = new Records();
rec.removeRecordAt(index);
$("#betTable tbody").remove();
var c = new Controller();
c.init();
}
});
$("a[id^=show_]").click(function(event) {
$("#extra_" + $(this).attr('id').substr(5)).slideToggle("slow");
event.preventDefault();
});
}
EDIT:
イベントハンドラは、各要素に追加されたように、私は、$("a[id=show_"+index).click...
に$("a[id^=show_]").click
を変更しなければなりませんでした新しい要素を追加する度に@ freedomn-mに感謝します。
私たちがより良いお手伝いをすることができるように、問題の実例を作成してください(スニペット内のすべての関連コードを共有してください) –
あなたは、テンプレートなしでこれを作成しようとすることでしょう。それがうまくいけば、テンプレート生成コードと作業コードの違いを見つけることができます。バイリングで作業コードをすでに使用しているので、テンプレートが生成しているものを見て、同じコードを生成していない理由を確認することができます。 –
'$(" a [id^= show _] ")' - このコードでは、*すべての既存のリンクに新しいイベントハンドラを追加します。また、新しいものもID固有ではなく、すべての 'a 'セレクタ。これはまた、 'show'の代わりに 'toggle'を使用する際の問題です。 –