product_listing.php FORM部件
<?php
$arr_cat_bn = [category01, category02];
$arr_subcat_ln_for_cbo_default = [subcategory01, subcategory02]; // For category01
$arr_subcat_ln_for_cbo_default = [subcategory11, subcategory12]; // For category02
$str_cat_bn_default = $arr_cat_bn[0];
if(isset($_POST["cbo_cat_bn"]))
{
$str_cat_bn_default = trim($_POST["cbo_cat_bn"]);
}
$str_subcat_ln_form = $arr_subcat_ln_for_cbo_default[0];
if(isset($_POST["cbo_subcat_ln"]))
{
$str_subcat_ln_form = trim($_POST["cbo_subcat_ln"]);
}
?>
<form role="form" name="frm_add" method="POST" action="product_listing.php">
<select name="cbo_cat_bn" id="cbo_cat_bn" onChange="get_subcat_ln(this.value);">
<?php
foreach($arr_cat_bn as $cat_bn) {
if($str_cat_bn_default == $cat_bn) { $str_selected="selected"; } else { $str_selected = ""; } ?>
<option value="<?php echo $cat_bn; ?>" <?php print($str_selected);?>><?php echo $cat_bn; ?></option>
</select>
<div id="before_get_subcat_ln">
<select name="cbo_subcat_ln" id="cbo_subcat_ln" onChange="get_qty(this.value);">
<?php
sort($arr_subcat_ln_for_cbo_default);
foreach($arr_subcat_ln_for_cbo_default as $subcat_ln) {
if(trim($str_subcat_ln_form) == trim($subcat_ln)) { $str_selected_ln = "selected"; } else { $str_selected_ln = ""; }
?>
<option value="<?php echo $subcat_ln; ?>" <?php print($str_selected_ln);?>><?php echo $subcat_ln; ?></option>
</select>
</div>
<div id="after_get_subcat_ln"></div>
<div id="before_get_qty">
<input type="text" id="txt_qty" name="txt_qty" value="<?php print($int_qty); ?>">
</div>
<div id="after_get_qty"></div>
<button type="submit" >SUBMIT</button>
</form>
product_listing.php jQuery部件
<script>
function get_subcat_ln(catbn) {
var str_catbn = catbn;
var dataString = "cat_bn_all="+str_catbn;
$.ajax({
type: "POST",
url: "../user/get_subcategory_p.php?",
data: dataString,
success: function(html)
{
$("#before_get_subcat_ln").hide();
$("#after_get_subcat_ln").html(html);
}
});
}
function get_qty(subcatln) {
var str_subcatln = subcatln;
var dataString = "cat_bn_all_and_subcat_ln="+str_subcatln;
$.ajax({
type: "POST",
url: "../user/get_qty_p.php?",
data: dataString,
success: function(html)
{
$("#before_get_qty").hide();
$("#after_get_qty").html(html);
}
});
}
</script>
get_subcategory_php(在类别选择框的基础上自动填充子类别选择框(
在这个页面上,处理后的POST数据和结果数据存储在Arrayarr_subcat_ln
中,并像这样返回到PHP页面。
echo "<select name='cbo_subcat_ln' id='cbo_subcat_ln'>";
sort($arr_subcat_ln);
foreach($arr_subcat_ln as $subcat_ln) {
echo "<option value='" . $subcat_ln . "'>" . $subcat_ln . "</option>";
}
echo "</select>";
get_qty_p.php(根据子类别选择框自动填充数量文本框(
在这个页面上,处理后的POST数据和结果数据存储在变量str_PackageSize
中,并像这样返回到PHP页面。
echo "<input type='text' id='txt_qty' name='txt_qty' value='".$str_PackageSize."'>";
- 第一个选择框=类别选择框
- 第二个选择框=子类别选择框
加载页面时,类别数组的第一个值默认显示在第一个选择框中。根据第一个选择框中的默认类别,正确的子类别值将填充到第二个选择框,其中子类别数组的第一个值默认显示在第一个。之后,根据第二个选择框中的默认子类别,正确的数量显示在数量文本框中。如果我从第二个选择框更改子类别,它会为所选子类别提供正确的数量值。
现在,问题是,当我更改第一个选择框中的值时,它在第二个选择框给出了正确的子类别值,但在第二选择框中默认子类别值的基础上,没有对数量文本框进行任何更改。现在,如果我在第二个选择框中更改子类别值,它仍然不会在所选子类别值的基础上更改数量文本框的值。
因此,当页面加载时,默认选择的类别和默认选择的子类别的数量会正确显示。如果我不更改类别,只更改子类别,它会给出正确的数量。一旦我更改了类别,我就会得到这个选定类别的正确子类别值。但我没有得到任何子类别的正确数量。
所以请让我知道我在代码中做错了什么,或者缺少了什么?
由于子类别选择框是动态创建的,您需要在ajax的成功函数下调用get_qty(subcatln)
,并传递html
中可用的子类别的默认值。现在,要传递默认值,可以使用两种方法。它们如下:
第一种方式:您可以在选择器中传递html
字符串,即:$()
,然后使用find(":first-child").val()
,这将为您提供选择框的第一个选项,然后您可以将其传递给get_qty(subcatln)
函数。
演示代码:
var html = '<select name="cbo_subcat_ln" id="cbo_subcat_ln"><option value="first">first</option><option value="second">second</option><option value="third">third</option></select>'
var subcatln = $(html).find(":first-child").val();
console.log("First default value : "+subcatln);
//call function
//get_qty(subcatln)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
第二种方法:您可以检查divafter_get_subcat_ln
中是否有任何select,根据这一点,您可以获得select的值,并将其传递给您的get_qty(subcatln)
。
演示代码:
var html = '<select name="cbo_subcat_ln" id="cbo_subcat_ln"><option value="first">first</option><option value="second">second</option><option value="third">third</option></select>'
$("#after_get_subcat_ln").html(html);
//check if the div have `cbo_subcat_ln`
if ($("#after_get_subcat_ln").find("select#cbo_subcat_ln").length > 0) {
//get that value
var subcatln = $("select#cbo_subcat_ln :first-child").val()
console.log("Second way : " + subcatln)
//call function
//get_qty(subcatln);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="after_get_subcat_ln"></div>
您需要将以上代码放在get_subcat_ln(catbn)
函数的ajax成功中。即:
function get_subcat_ln(catbn) {
...
$.ajax({
type: "POST",
url: "../user/get_subcategory_p.php?",
data: dataString,
success: function(html)
{
$("#before_get_subcat_ln").hide();
$("#after_get_subcat_ln").html(html);
//here you need to get value of either way
//call get_qty(subcatln) to update qty input
}
});
}
这实际上是一个JS问题。您忘记在php脚本中添加onChange
。因此,每当您的<select>
被替换时,onChange
就会丢失。
$('#btn').on('click', function() {
$('#select').html('<select><option>A</option><option>B</option>');
});
$('#btn2').on('click', function() {
$('#select').html('<select onChange='alert("yay" + this.value);'><option>A</option><option>B</option>');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="select">
<select>
<option>1</option>
<option>2</option>
</select>
</div>
<hr />
<button id="btn">Load list without onChange</button><br />
<button id="btn2">Load list with onChange</button>
你可能也想读一下:MCVE