javascript - jQuery on change 不触发选择
问题描述
我正在使用一个选择下拉列表(位置:状态),我在 ajax 对象的响应中附加了一些选项。
现在我想在状态变化时通过 ajax 请求加载城市。但是,on change 事件不起作用
我正在使用下面的 HTML 代码
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4">
<label>Select state</label><span id="stateLoader"></span>
<select class="hash-checkout__section-1-add-address-state form-control"></select>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4">
<label>Select city</label><span id="cityLoader"></span>
<select disabled class="hash-checkout__section-1-add-address-city form-control"></select>
</div>
在 ajax 响应下方,我使用将选项附加到状态
.done( function( resp ) {
$( '#stateLoader' ).html( '' );
$this.attr( 'disabled', false );
if ( resp.status === 'success' )
{
stateDataStatus = true;
$.each( resp.states , function( index, val ) {
$this.append( val );
});
}
})
然后我使用下面的代码来触发 onChange 事件
$( 'body' ).on( 'change', '.hash-checkout__section-1-add-address-state', function()
{
alert('triggered');
// $( '#cityLoader' ).html( dataLoader );
});
但由于某种原因,on change 没有触发,我不确定为什么?为什么?
解决方案
您好我已经为您测试了这种安排:
这很简单,您应该使用以下命令添加新的 val 作为选项:
$this.append( "<option>" + val + "</option>" );
HTML 索引.html:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var stateDataStatus = false;
$(document).ready(function () {
$( 'body' ).on( 'change', '.hash-checkout__section-1-add-address-state', function()
{
alert('triggered');
// $( '#cityLoader' ).html( dataLoader );
});
$( 'body' ).on( 'click focus', '.hash-checkout__section-1-add-address-state', function() {
//
// do nothing if having already done:
//
if(stateDataStatus) {
return false;
}
//
$this = $( this );
$.ajax({
url: "getstates.php"
}).done( function( resp ) {
//$( '#stateLoader' ).html( '' );
//$this.attr( 'disabled', false );
//alert(resp);
if ( resp.status === 'success' ) {
$.each( resp.states , function( index, val ) {
$this.append( "<option>" + val + "</option>" );
});
stateDataStatus = true;
}
});
});
});
</script>
</head>
<body>
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4">
<label>Select state</label><span id="stateLoader"></span>
<select class="hash-checkout__section-1-add-address-state form-control"></select>
</div>
<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4">
<label>Select city</label><span id="cityLoader"></span>
<select disabled class="hash-checkout__section-1-add-address-city form-control"></select>
</div>
</body>
</html>
jQuery.ajax() 调用 getstates.php,它只返回一个 JSON 对象,如下所示:
<?php
header("Content-Type: application/json; charset=UTF-8");
$array = ["status" => "success", "states" => ["france", "china", "usa"]];
echo json_encode($array, JSON_PRETTY_PRINT);
?>
推荐阅读
- database - 用 H2 测试 SpringBoot 数据库的正确方法是什么?
- r - set.seed() 函数与 sample() 函数结合是否始终提供与所用硬件无关的相同样本?
- javascript - Vue不显示对象
- python - 需要显示最高价格和拥有它的公司
- excel - 如何从 Excel 宏中创建 Word 段落格式对象
- deep-learning - 在 pytorch 中可视化张量(视频)
- javascript - 抓取 m3u8 文件的路径
- python - Django:cleanse_setting 中的无限循环
- windows - 如何将文件夹中的每个 X 子文件夹压缩为单独的 rar 文件
- excel - 使用“分页”更改网站页面的宏