如何为每一行动态更新模态内的文本 JQuery
How to dynamically update text within a modal for each row JQuery
所以我有每个用户的 table 个约会,并且每一行都有一个名为 'Actions' 的按钮。单击此按钮时,会弹出一个模式,其中包含针对该特定 row/booking 的一系列操作,即完成预订或取消等。在该模式中,每个操作都有选项卡。其中一项操作是 'Adjust Payment',用户可以在其中调整客户必须为其预约支付的最终金额。
但是他们输入的新金额必须高于当前金额。这是我目前所拥有的:
模态:
<div id="myTabContent" class="tab-content" style="font-weight: 200; font-family: MontserratExtraLight;" >
<div class="tab-pane fade active in" id="adjustPayment<?php echo $i; ?>">
<?php
<h2 style="float: left;" class="modal-title text-color">Adjust Payment</h2>
<br><br>
<p style="float: left;font-size: 15px;">Adjust Patients Final Payment</p>
<input type="hidden" name="id" value="<?php echo $bookings[$i]['id']; ?>"/>
<input type="hidden" name="customer_id" value="<?php echo $bookings[$i]['customer_id']; ?>"/>
<input type="hidden" name="booking_id" value="<?php echo $bookings[$i]['booking_id']; ?>"/>
<input hidden type="hidden" name="date_time_from" value='<?php echo $bookings[$i]['date_time_from']; ?>' />
<br><br>
<p style="float: left;font-size: 15px;">You can adjust the final amount the customer has to pay below. </p>
<br>
<p style="text-align: center;font-size: 15px;"> Please Enter a New Payable Amount (inc. Add-ons): </p> <br>
<div class="col-md-12">
<div class="form-group div-style">
<small class="help">
<span style="display:none;" id="message_c" class="message" role="alert">The new payable amount must be higher than the previous payable amount.</span> </small>
<span style="font-size:20px; font-weight:bold;"> <?php echo CURRENCY_SYMBOL." " ?> </span>
<input type="text" class="input form-control main-color input-lg new_payable_amount" id="new_payable_amount" style="background: #f4f4f4; width:30%; float:center; display: inline-block; font-weight:bold;" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" name="new_payable_amount"><br>
</div>
</div>
<br><br>
<p style="float:left;font-size: 15px;"><strong>Note:</strong> You can only enter an amount higher than the current amount payable by the patient which is:</p>
<p id="old_payable_amount" class="old_payable_amount" style="text-align: center; font-size: 26px; font-weight: bold; "><?php echo CURRENCY_SYMBOL." ". number_format($bookings[$i]['payment'] / 100, 2); ?> </p>
<input type="button" id="adjustAmount" class="button btn-black btn-system btn button-lg adjustAmount" style="margin-top: 10px; border-radius:0px; width: 30%; margin-bottom: 0%;" value="Adjust">
<?php //} ?>
</div>
JQuery:
$('.new_payable_amount').on('keyup', function() {
// var new_payable = document.getElementById('new_payable_amount').value;
var new_payable = $(".new_payable_amount").val();
//var old_payable = document.getElementById('old_payable_amount').innerHTML;
var old_payable = $(".old_payable_amount").html();
old_payable = old_payable.replace(/[^\d\.]/g, '');
if(new_payable <= old_payable){
// document.getElementById('message_c').innerHTML="The new payable amount must be higher than the previous payable amount." +old_payable +" " +new_payable;
$(".message").html("The new payable amount must be higher than the previous payable amount." +old_payable +" " +new_payable);
// document.getElementById('message_c').style.display = 'block';
$(".message").css("display", "block");
$("#adjustAmount").attr("disabled", true);
}else {
// document.getElementById('message_c').innerHTML= "";
$(".message").html("Pass ");
//document.getElementById('message_c').style.display = 'block';
$(".message").css("display", "block");
$("#adjustAmount").attr("disabled", false);
}
});
问题是 JQuery 从第一行返回数据,而 jquery 脚本中的操作只影响第一行的模态。起初我使用 id 来检索数据和组件,但后来转向 类 因为有多行,但是这也不起作用。当前代码 returns 第一行 'old_payable_amount',第一行输入的 'new_payable_amount' 显示在所有行中,并且消息不会为每一行动态更新。
此外,一旦单击 'Adjust' 按钮,我希望它打开一个确认对话框,但我没有使用确认,而是创建了一个模式,每次单击调整时都能正确打开。我想将一个值传递给这个模态,并且想知道你怎么可能这样做?我曾尝试通过 href,但模态无法按预期打开,除非我使用 jquery.
您可以使用 $(this)
从您 keyup
而不是 $('.new_payable_amount')
的那一个获取值 - 这将是一个集合......所以你改变class.
每个元素的值
使用$(this).val()
和$(this).html()
更新和获取数据。
如果您的输入是 number
您可以使用 min
和 max
属性 而无需使用 js
已更新
- 您的“另外询问”。您需要以某种方式关联您的模态。
在你的代码中我可以看到
<input type="hidden" name="id" value="<?php echo $bookings[$i]['id']; ?>"/>
在确认模式的 id
中使用此 id
。喜欢
<div id="updated_amount_<?php echo $bookings[$i]['id']; ?>"></div>
然后你可以更新它知道 id...
var update_id = $(this).parent().parent().parent().parent().find("input[name='id']");
$("updated_amount_"+update_id).html(new_payable);
这可能是更好的方法,但这就是我对 fast 的想法
还有一个问题是模态对话框是如何附加的。是从一开始就在html中渲染还是每次都被js附加。
所以我有每个用户的 table 个约会,并且每一行都有一个名为 'Actions' 的按钮。单击此按钮时,会弹出一个模式,其中包含针对该特定 row/booking 的一系列操作,即完成预订或取消等。在该模式中,每个操作都有选项卡。其中一项操作是 'Adjust Payment',用户可以在其中调整客户必须为其预约支付的最终金额。
但是他们输入的新金额必须高于当前金额。这是我目前所拥有的:
模态:
<div id="myTabContent" class="tab-content" style="font-weight: 200; font-family: MontserratExtraLight;" >
<div class="tab-pane fade active in" id="adjustPayment<?php echo $i; ?>">
<?php
<h2 style="float: left;" class="modal-title text-color">Adjust Payment</h2>
<br><br>
<p style="float: left;font-size: 15px;">Adjust Patients Final Payment</p>
<input type="hidden" name="id" value="<?php echo $bookings[$i]['id']; ?>"/>
<input type="hidden" name="customer_id" value="<?php echo $bookings[$i]['customer_id']; ?>"/>
<input type="hidden" name="booking_id" value="<?php echo $bookings[$i]['booking_id']; ?>"/>
<input hidden type="hidden" name="date_time_from" value='<?php echo $bookings[$i]['date_time_from']; ?>' />
<br><br>
<p style="float: left;font-size: 15px;">You can adjust the final amount the customer has to pay below. </p>
<br>
<p style="text-align: center;font-size: 15px;"> Please Enter a New Payable Amount (inc. Add-ons): </p> <br>
<div class="col-md-12">
<div class="form-group div-style">
<small class="help">
<span style="display:none;" id="message_c" class="message" role="alert">The new payable amount must be higher than the previous payable amount.</span> </small>
<span style="font-size:20px; font-weight:bold;"> <?php echo CURRENCY_SYMBOL." " ?> </span>
<input type="text" class="input form-control main-color input-lg new_payable_amount" id="new_payable_amount" style="background: #f4f4f4; width:30%; float:center; display: inline-block; font-weight:bold;" onkeypress="return (event.charCode !=8 && event.charCode ==0 || ( event.charCode == 46 || (event.charCode >= 48 && event.charCode <= 57)))" name="new_payable_amount"><br>
</div>
</div>
<br><br>
<p style="float:left;font-size: 15px;"><strong>Note:</strong> You can only enter an amount higher than the current amount payable by the patient which is:</p>
<p id="old_payable_amount" class="old_payable_amount" style="text-align: center; font-size: 26px; font-weight: bold; "><?php echo CURRENCY_SYMBOL." ". number_format($bookings[$i]['payment'] / 100, 2); ?> </p>
<input type="button" id="adjustAmount" class="button btn-black btn-system btn button-lg adjustAmount" style="margin-top: 10px; border-radius:0px; width: 30%; margin-bottom: 0%;" value="Adjust">
<?php //} ?>
</div>
JQuery:
$('.new_payable_amount').on('keyup', function() {
// var new_payable = document.getElementById('new_payable_amount').value;
var new_payable = $(".new_payable_amount").val();
//var old_payable = document.getElementById('old_payable_amount').innerHTML;
var old_payable = $(".old_payable_amount").html();
old_payable = old_payable.replace(/[^\d\.]/g, '');
if(new_payable <= old_payable){
// document.getElementById('message_c').innerHTML="The new payable amount must be higher than the previous payable amount." +old_payable +" " +new_payable;
$(".message").html("The new payable amount must be higher than the previous payable amount." +old_payable +" " +new_payable);
// document.getElementById('message_c').style.display = 'block';
$(".message").css("display", "block");
$("#adjustAmount").attr("disabled", true);
}else {
// document.getElementById('message_c').innerHTML= "";
$(".message").html("Pass ");
//document.getElementById('message_c').style.display = 'block';
$(".message").css("display", "block");
$("#adjustAmount").attr("disabled", false);
}
});
问题是 JQuery 从第一行返回数据,而 jquery 脚本中的操作只影响第一行的模态。起初我使用 id 来检索数据和组件,但后来转向 类 因为有多行,但是这也不起作用。当前代码 returns 第一行 'old_payable_amount',第一行输入的 'new_payable_amount' 显示在所有行中,并且消息不会为每一行动态更新。
此外,一旦单击 'Adjust' 按钮,我希望它打开一个确认对话框,但我没有使用确认,而是创建了一个模式,每次单击调整时都能正确打开。我想将一个值传递给这个模态,并且想知道你怎么可能这样做?我曾尝试通过 href,但模态无法按预期打开,除非我使用 jquery.
您可以使用
每个元素的值$(this)
从您keyup
而不是$('.new_payable_amount')
的那一个获取值 - 这将是一个集合......所以你改变class.使用
$(this).val()
和$(this).html()
更新和获取数据。如果您的输入是
number
您可以使用min
和max
属性 而无需使用 js
已更新
- 您的“另外询问”。您需要以某种方式关联您的模态。
在你的代码中我可以看到
<input type="hidden" name="id" value="<?php echo $bookings[$i]['id']; ?>"/>
在确认模式的 id
中使用此 id
。喜欢
<div id="updated_amount_<?php echo $bookings[$i]['id']; ?>"></div>
然后你可以更新它知道 id...
var update_id = $(this).parent().parent().parent().parent().find("input[name='id']");
$("updated_amount_"+update_id).html(new_payable);
这可能是更好的方法,但这就是我对 fast 的想法
还有一个问题是模态对话框是如何附加的。是从一开始就在html中渲染还是每次都被js附加。