如何查找多个.change()事件,这些事件指向正在被AJAX操作的项
How do I look for multiple .change() events to items that are being manipulated with AJAX
第一个问题,我会尽量遵守所有的规则。
我有一个PHP页面,有两个选择组,第二组是默认禁用的。
第一个选择组称为"yearlist",第二个选择组称为"makelist"
当用户更改yearlist中的选项时,第二个框(makelist)将用数据库表中的选项填充(通过my script.js中的ajax请求),并且不再被禁用。
当我在第二个选择组makelist中进行选择时,问题出现了。我希望jQuery在注意到用户在该makelist组中所做的更改时发出一个简单的警报("hello"),但它不会工作,我不确定为什么。
主文件:
<?php
$con = mysqli_connect("localhost","xxxx","xxxx","xxxx");
$query="SELECT * FROM carstats GROUP BY year ORDER BY year DESC";
$result = mysqli_query($con, $query);
?>
<script type="text/javascript" src="js/script.js"></script>
<select id="yearlist" name="yearlist">
<option>SELECT YEAR</option>
<?php
while ($row=mysqli_fetch_array($result)){
echo "<option>" . $row['year']. "</option>";
}
?>
</select>
<!--this will be populated/replaced via ajax-->
<div class="makeResult">
<select id="makelist" name="makelist" disabled="disabled">
<option>SELECT MAKE</option>
</select>
</div>
jQuery (script.js):
$(document).ready(function() {
$('#yearlist').change(function() {
//save the selection as a variable
var selectedYear = $(this).val();
$.get("change_query.php?selectedYear="+selectedYear, function(data){
$('div.makeResult').html(data);
});//end get function
});//end yearlist change function
$('#makelist').change(function() {
//eventually want to do more but for now just alert that it's working
alert("makelist has been changed");
});//end makelist change function
});//end ready function
最后,change_query.php文件:
<?php
$con = mysqli_connect("localhost","xxxx","xxxx","xxxx");
$year = $_GET["selectedYear"];//this is grabbed from the JS script
$query="SELECT * FROM carstats WHERE year='".$year."' GROUP BY make ORDER BY make";
$result = mysqli_query($con, $query);
?>
<select id="makelist" name="makelist">
<option>SELECT MAKE</option>
<?php
while ($row=mysqli_fetch_array($result)){
echo "<option>" . $row['make']. "</option>";
}
?>
</select>
使用
$('div.makeResult').html(data);
您正在删除#makelist元素和附加的更改事件,因此您有一个新的#makelist元素,但没有更改事件。将$('#makelist').change()函数放在$。获取回调函数
$.get("change_query.php?selectedYear="+selectedYear, function(data){
$('div.makeResult').html(data);
$('#makelist').change(function() {
//eventually want to do more but for now just alert that it's working
alert("makelist has been changed");
});//end makelist change function
});//end get function
只是为了澄清,当你附加一个事件,如$('#makelist').change(…),你是附加该事件到元素,而不是ID。如果您替换了该元素,即使该元素具有与旧元素相同的id,该事件也将消失。
正如James L所说,当您覆盖#makelist
DOM节点时,它会被破坏,因此不再附加事件处理程序。
$('#makelist').change(function () {})
你可以用
$(document).on('change', '#makelist', function() {})
这将事件处理程序附加到文档,它将始终被调用。
相关文章:
- toogleClass函数来切换元素类并在事件期间执行某些操作
- 禁用先前单击按钮时的单击事件操作
- reactJs redux:如何对用户事件调度操作并将操作与化简器和存储链接
- 如何在执行某个操作后自动触发回车键事件
- 在悬停事件中创建一次性操作
- 将单击事件附加到按钮或链接上的类,该按钮或链接会触发 AJAX 帖子,然后延迟并继续原始操作
- MVC 下拉列表更改事件未正确调用控制器中的操作
- 如何在Javascript事件上触发rails控制器操作
- 如何使用 JavaScript 操作 html 按钮元素的“onclick”事件
- 如何删除绑定到单击事件的任何jQuery操作
- 如何在jquery可丢弃事件中执行某些操作
- html+jquery(绑定onclick事件以执行onclick之前的操作)
- 如何使用body onload事件操作HTML音频标记和JavaScript函数
- 排除事件操作的事件侦听
- 如何停止jquery中的默认选择事件操作
- 将类似的点击事件操作转换为函数
- 在标准事件操作完成后采取操作
- 在Node.js后端记录事件/操作,以便稍后进行分析
- Javascript事件操作
- addEventListener覆盖其他事件操作