0
jQuery DataTable内に配置されたRadioButtonにイベントハンドラを追加しようとしています。各無線Btnの「変更」イベントを追加します
$("input[name='Button0']").live("change", function() {
radioValue[0] = $(this).val();
});
ボタン名は、各DataTable行に対して動的に生成されます。質問リストがあり、質問ごとにラジオボタングループがあります。しかし、これは私にそれも存在してはいけません完全に間違ってインデックスに一つの値だけを記入すると、私の「radioValue」配列を埋めるで奇妙な振る舞いを与える
var countRows = 0;
$.each(questionList, function (index, value) {
var btnName = 'Button' + countRows.toString();
$("input[name="+btnName+"]").live("change", function() {
radioValue[countRows] = $(this).val();
});
countRows++;
});
:私はこのような何かを試してみました。
これは私のhtmlです:
<div class="content" id="IndexCompletion">
<h2>Erfassen der Leistung für Mitarbeiter: @Model.Mitarbeiter.Vorname @Model.Mitarbeiter.Nachname</h2>
<div class="dataTableSurrounding">
<table id="surveyTable">
<thead>
<th>Frage</th>
@foreach (var answerOption in Model.Survey.Questions.FirstOrDefault().AnswerOptions)
{
<th>@answerOption.Description</th>
}
</thead>
<tbody class="dynamicTryOut">
</tbody>
</table>
</div>
<br />
<br />
<div>
<input type="button" id="saveSurvey" value="Senden">
</div>
そして、これは、スクリプトセクションです:
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css">
@section scripts{
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script>
var val1, val2;
var questionList = JSON.parse(JSON.stringify(@Html.Raw(Model.JsonStringQuestions)));
var answerOptionList = JSON.parse(JSON.stringify(@Html.Raw(Model.JsonStringAnswerOptions)));
var radioValue = [];
$(document).ready(function() {
var table = $('#surveyTable').DataTable({
"processing": true,
"serverSide": true,
"filter": false,
"orderMulti": false,
"ajax": {
"url": '@Url.Action("LoadSurvey", "Home")',
"type": "POST",
"datatype": "json"
},
"columns": [{ "data": "Text", "name": "Text", "autoWidth": true },
{
"render": function(data, type, full, meta) {
return '<input type="radio" class="questionButton" name="Button' + meta.row + '" value="1">';
}
},
{
"render": function(data, type, full, meta) {
return '<input type="radio" class="questionButton" name="Button' + meta.row + '" value="2">';
}
},
{
"render": function(data, type, full, meta) {
return '<input type="radio" class="questionButton" name="Button' + meta.row + '" value="3">';
}
},
{
"render": function(data, type, full, meta) {
return '<input type="radio" class="questionButton" name="Button' + meta.row + '" value="4">';
}
},
{
"render": function(data, type, full, meta) {
return '<input type="radio" class="questionButton" name="Button' + meta.row + '" value="5">';
}
}],
"language": {
"info": "Seite _PAGE_ von _PAGES_",
"infoEmpty": "Keine Einträge verfügbar",
"lengthMenu": "_MENU_ Einträge pro Seite",
"zeroRecords": "Keine Einträge gefunden",
"infoFiltered": "(filtered from _MAX_ total records)",
"processing": "Lade Formular",
"paginate": {
"next": "Weiter",
"previous": "Zurück"
}
}
});
$("#saveSurvey").click(function() {
$('<form [email protected]("SaveSurvey") method="POST">' +
'<input type="hidden" name="surveyId" value="' + @Model.Survey.Id + '">' +
'<input type="hidden" name="val1" value="' + val1 + '">' +
'<input type="hidden" name="val2" value="' + val2 + '">' +
'</form>').submit();
});
var counters = 0;
$.each(questionList, function (index, value) {
$('input[name="Button' + counters + '"]').on('change', function() {
alert("worked");
radioValue[counters] = $(this).val();
});
counters++;
});
});
</script>
}
問題何ができるか任意のアイデア?
スニペットまたはフィドルでコードの実際の例を挙げてください。達成しようとしているものを正確に視覚化することは困難です。最低でもHTMLを見れば助けになります。私が明確に言うことができるのは、あなたが 'live()'を使ってはならないということだけです。それは、長い*時間前に廃止されました。あなたは 'on'の委任形式を使用していなければなりません。 jQueryのバージョンも更新することをお勧めします。また、 'countRows'値を決して変更しないので、配列の' 0'インデックスの要素にのみ影響します。 –
jQuery 1.7では、.live()メソッドは非推奨です。 .on()を使用してイベントハンドラをアタッチします。 jQueryの古いバージョンのユーザーは、.live()よりも.delegate()を優先して使用する必要があります。 –
これは、( "input [name =" + btnName + "]") ")" on "(" change "、function(){....}); .on()の正しい構文ですか? – Bobscure