[问题] 控制以AJAX插入的东西…

楼主: red0whale (red whale)   2016-08-19 21:31:48
┌─────┐
│index.htm │
└─────┘

<style>
#aaa{
background: red;
width: 200px;
height: 200px;
}
</style>
<script>
$(function(){
$.post("demo.php",{id:"aaa"},function(result){
$("#bbb").html(result);
});
$("#aaa").on('click', function(){
alert("Hello world!");
});
});
</script>
<div id="bbb"></div>

┌────┐
│demo.php│
└────┘
<div id='<? echo $_POST['id']; ?>'></div>
==========
大家好,
以上范例我想让一个id为aaa的<div>以AJAX的方式插入于id为bbb的<div>中
插入后会看到一红色方块
但问题是我想让使用者按下那红色方块后可以跳出一警告方框
Javascript好像不允许控制以AJAX插入的东西
请问该怎么解决这问题?
谢谢
作者: Hevak (Arthow Eshes)   2016-08-19 22:04:00
不是不允许控制以ajax插入,而是你$('#a'aa).on('click')的这个执行的时间点不对上面ajax执行的时候会发出异步的动作,等到收到回传值才把回传值丢进你ajax那个参数里面的那个function(也就是callback)。你发出了一个异步的动作,那一行下面的code会继续被同步执行,无视于异步的东西已经执行完了与否。所以你的 $('#aaa').on('click')应该要放在$('#bbb').html(result);那一行的下面,这个时间点因为异步的动作已经值行完毕了,回到callback function里面的东西又是同步的思维,$('#bbb')先把id="aaa"的html塞进去#bbb了,这时候页面上才有id="aaa"的元素,同时$('#aaa')也才有办法选择到对应的元素。而你原先有问题的作法的流程是:1. 发出一个异步动作,此时ajax回传值还没回来2. 继续同步执行下面的$('#aaa'),因为页面上还没有id="aaa"的元素,所以$("#aaa")选不到任何东西,也绑不上事件3. 这时候ajax回传值才回来,执行$('#bbb').html(result),直到这时候的bbb里面才有id="aaa"的元素
作者: CrazyAngel (无口系天然呆)   2016-08-20 22:33:00
$('#bbb').on('click', '#aaa', function(){ ... });

Links booklink

Contact Us: admin [ a t ] ucptt.com