<<このスレを参考に>>
モーダル ボックスから選択した値を、その行に基づいて各テキスト ボックスに渡す方法は?テキスト ボックスを動的に追加または削除できます。テキスト ボックスを埋めるには、モーダル ボックスから値を選択する必要があります。
例えば:
[Add Textbox] [Remove Textbox]
[TextBox1] [Link]
[TextBox2] [Link]
...
[TextBoxX] [Link]
リンクをクリックすると、ユーザーがモーダルボックスで提供されたテーブルのリストを選択し、その行のテキストボックスに値を返すためのモーダルボックスが表示されます。以下のコードを作成しましたが、各テキストボックスの値を返します。
以下のコードを参照してください。
この JavaScript コードは、テキスト ボックスを追加/削除するためのものです。
<script type="text/javascript">
//Add
$('#tblDetail tbody').on("click", "a", function() {
$("#products_modal_box").data("target", $(this).siblings("input"));
showProductsModalBox();
return false;
});
$(document).ready(function() {
$("#addRow").click(function() {
$('#tblDetail tbody>tr:last').clone(true).insertAfter('#tblDetail tbody>tr:last');
$('#tblDetail tbody>tr:last #field1').val('');
$('#txtTotalRow').val(tblDetail.rows.length - 1);
});
});
function removeRowFromTable() {
var tbl = document.getElementById('tblDetail');
var lastRow = tbl.rows.length;
if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}
</script>
これは、テキストボックスとテキストボックス自体を追加/削除するフォームです:
<form id="form1" action="#" method="post">
<input type="button" id="addRow" value="ADD" />
<input type="button" id="removeRow" value="REMOVE" onclick="removeRowFromTable(); $('#txtTotalRow').val(tblDetail.rows.length - 1);"/>
<input type="hidden" name="txtTotalRow" id="txtTotalRow" value="1" />
<table cellpadding='0' cellspacing='0' border='0' id='tblDetail' width='100%'>
<tr>
<th colspan="3"> </th>
</tr>
<tr>
<td>
<input type="text" name="field1[]" id="ProductID" />
<a href="#" ><!-- removed - onclick="showProductsModalBox(); return false;" /-->
Choose
</a>
</td>
</tr>
</table>
</form>
modal-box スクリプトは、このスレッドで参照されます。「field1」テキストボックスに値を渡すためにリンクに挿入されたインライン JavaScript は、次のように変更されました。
<!-- Edited - <a href=\"javascript:;\" onclick=\"$('input[name=field1]').val('".$fetch[0]."');$('#products_modal_box').dialog('close')();\"> /-->
<a href=\"javascript:;\" onclick=\"$('#products_modal_box').data('target').val('".$fetch[0]."');$('#products_modal_box').dialog('close')();\">
そのコードは、最初のテキストボックスの値を渡すために機能します。しかし、テキストボックスを追加してモーダルボックスから値を選択しようとしている間、値は各テキストボックス (最初のテキストボックスと 2 番目のテキストボックス) に渡されます。各テキストボックスの値を異なる方法で渡す方法は? ありがとう。
--- 更新 1 ---
$('#tblDetail tbody').on("click", "a", function() {
console.log($(this)); // This should be the link you just clicked
console.log($(this).siblings("input")); // This should be the text box you want to save the value to
$("#products_modal_box").data("target", $(this).siblings("input"));
console.log($("#products_modal_box").data("target")); // To confirm it was saved correctly as data
showProductsModalBox();
return false;
});
firebug でコンソールを確認すると、結果は次のようになります。
[a#]
[]
[]
更新 2 - 実際の問題
製品 ID テキストボックスのマークアップ:
<table cellpadding="5px" id="tblDetail" class="tblDetail" width="100%">
<tr>
<th colspan="2" width="15%">Product ID</th>
<th>Problem</th>
</tr>
<tr>
<td><input type="text" name="productid[]" id="productid" size="7"/></td>
<td><a href="#">Choose</a></td> <!-- THE PROBLEM WAS HERE /-->
<td><input type="text" name="problem[]" id="problem" /></td>
</tr>
</table>
<input type="button" id="addRow" value="ADD" />
<input type="button" id="removeRow" value="REMOVE" onclick="removeRowFromTable();"/>
Modal-box のマークアップ:
<div id="IDBarang_dialog" title="Ambil ID Barang" style="display: none;">
<div class="in">
<div class="grid-12-12">
<form ID="IDBarang_dialog_form" action="#" method="post">
<table>
<thead>
<tr>
<th> </th>
<th>Product</th>
</tr>
</thead>
<!-- Query for read mysql goes here (I skipped this line because it's not the main thing I'm gonna ask since it's run well) /-->
<tbody>
<?php
//read the results
while($fetch = mysqli_fetch_array($r)) {
print "<tr>";
print " <td><a href='#' onclick=\"$('#IDBarang_dialog').data('target').val('".$fetch[0]."');$('#IDBarang_dialog').dialog('close')();\">Choose</a></td>";
print " <td>" . $fetch[0] . "</td>"; //$fetch[0] == Product ID
print "</tr>";
}
?>
</tbody>
</table>
</form>
</div>
</div>
</div>
Javascript:
<script>
var grid_modal_options = {
height: 'auto',
width: '80%',
modal: true
};
function showIDBarangModalPopup() {
$("#IDBarang_dialog").dialog(grid_modal_options);
$("#IDBarang_dialog").parent().appendTo('form:first');
}
</script>
<script type="text/javascript">
//MODAL-BOX
$('#tblDetail tbody').on("click", "a", function() {
console.log($(this));
console.log($(this).siblings("input"));
$("#IDBarang_dialog").data("target", $(this).siblings("input"));
console.log($("#IDBarang_dialog").data("target"));
showIDBarangModalPopup();
return false;
});
//ADD ROW
$(document).ready(function() {
$("#addRow").click(function() {
$('#tblDetail tbody>tr:last').clone(true).insertAfter('#tblDetail tbody>tr:last');
$('#tblDetail tbody>tr:last #productid').val('');
$('#tblDetail tbody>tr:last #problem').val('');
return false;
});
});
//REMOVE ROW
function removeRowFromTable() {
var tbl = document.getElementById('tblDetail');
var lastRow = tbl.rows.length;
if (lastRow > 2) tbl.deleteRow(lastRow - 1);
}