
標題: [問題]jquery&ajax回傳問題(已解決) [打印本頁]
作者: xxoxxoxxoxx 時間: 2009-9-28 12:33 標題: [問題]jquery&ajax回傳問題(已解決)
站上各位大大好,小弟在本站吸收了不少知識,因為都沒註冊
但拜讀了jquery後,卻遇上了問題,所以剛註冊就來請教,真不好意思...
問題:
小弟寫了一個jquery的ajax,但回傳回來的值,無法再觸動
例如:<script>
$(document).ready(function(){
$.ajax({
type: "POST",
url: "data.php",
data: false,
cache: false,
success: function(content){
$("#mDiv").html(content);
}
});
});
</script>
<body>
<div id='mDiv'></div>
<div id='bbb'>click me!</div>
</body>
回傳的值為:
<div id='aaa'>hello world!</div>
若以回傳的id「aaa」寫觸發,但卻無法動作<script>
$(document).ready(function(){
$('#aaa').click(function(){
$('#aaa').html("hello ajax!");
});
});
</script>
但若寫成這樣卻是可以動作<script>
$(document).ready(function(){
$('#bbb').click(function(){
$('#aaa').html("hello ajax!");
});
});
</script>
請教站上大大該如何解決呢?? 萬分感激
[ 本帖最後由 xxoxxoxxoxx 於 2009-10-23 14:10 編輯 ]
作者: wmh 時間: 2009-9-28 22:34
因為你在 document ready 時寫觸發,但是那時候的 id「aaa」並不存在,有兩種做法:
- 在 ajax success 的 callback 內寫觸發 event
- 如果是用 jquery 1.3 以上的版本,可以改用 live() 寫觸發 event,一開始 #aaa 不存在也沒關係
作者: xxoxxoxxoxx 時間: 2009-9-28 23:16
原帖由 wmh 於 2009-9-28 22:34 發表 
因為你在 document ready 時寫觸發,但是那時候的 id「aaa」並不存在,有兩種做法:
在 ajax success 的 callback 內寫觸發 event
如果是用 jquery 1.3 以上的版本,可以改用 live() 寫觸發 event,一開始 #aaa 不存在 ...
太感謝大大了,已解決問題了
原來使用live()觸發可以解決,請問大大live跟 document ready還有那些差別呢?
如果live這麼好用,是不是都使用live就好了?
另外「ajax success 的 callback 內寫觸發 event」是什麼意思呢?大蓋要如何寫呢?大大能否提供一些提示
總之,真的太感謝了,繼續努力拜讀
jsGears好棒
wmh大 更棒
作者: wmh 時間: 2009-9-29 08:32
使用 live 應該是把 event handler 綁在 document.body,所以即使 element 一開始不存在,等 element 出現時馬上就有作用,其實是 document.body 的事件驅動,藉此模擬該 elment 的事件驅動。
在 callback 內才 bind 大致像這樣:
success: function(content) {
$("#mDiv").html(content);
//這時才去 bind
$('#aaa').click(function() {...});
}
作者: xxoxxoxxoxx 時間: 2009-9-29 09:39
原帖由 wmh 於 2009-9-29 08:32 發表 
使用 live 應該是把 event handler 綁在 document.body,所以即使 element 一開始不存在,等 element 出現時馬上就有作用,其實是 document.body 的事件驅動,藉此模擬該 elment 的事件驅動。
在 callback 內才 bind 大致像 ...
原來是這樣,感謝大大
請教大大,若live使用太多效能會不會比較差呢?
這2種寫法,效能上會有差異嗎?
作者: wmh 時間: 2009-9-29 11:43
理論上使用 live 效能應該比較差一點點,不過差異到底多少,會不會影響使用者的感覺,可能要試過才知道。你可以用大量的 live 去綁定事件來測試看看。
第 2 種寫法應該是 ok 的,很一般的寫法。
作者: xxoxxoxxoxx 時間: 2009-9-29 13:33
我發現若用live要觸發focus及blur無法動作說
如<input type='text' id='aaa'>$(#aaa).live("focus",function(){
......
.......
});
但若是直接在document ready使用focus()跟blur()是可以動作的
$(document).ready(function(){
$("#aaa").focus(function(){
......
.......
});
});
不知道該如何解決呢?
另外想再請教
若button1使用click觸動div1
button2觸動div2
button3觸動div3
button4觸動div4
...
多組的話該如何寫呢?
有望大大解答,真的是萬分感激
[ 本帖最後由 xxoxxoxxoxx 於 2009-9-29 16:21 編輯 ]
作者: wmh 時間: 2009-9-29 20:12
我是沒試過,不過如果用 live 不支援 focus 和 blur 的話,就得用正常的方式綁定事件囉。
多組的話就寫多次即可。不過是要觸發 div 的什麼呢?
作者: xxoxxoxxoxx 時間: 2009-9-30 09:47
感謝大大回復,多組的資料是用php印出來的
想說資料如果變多的話,寫多個好像沒效率...
主要是傳出來的資料,旁邊搭配一個按鈕,click後觸發該div變成一個input text
裡面則是原本div的text
不知道大大懂我的意思嗎?所以若10筆資料,不就要寫10個click觸發
作者: wmh 時間: 2009-9-30 12:15
寫 10個 click 觸發還 ok 啦,不過如果設計成用共一個 handler 來處理會比較好。
如果你要做 editable textbox 可以找現有的 jquery plugin,或許有適合的。
http://www.appelsiini.net/projects/jeditable
http://www.arashkarimzadeh.com/i ... -jquery-plugin.html
作者: xxoxxoxxoxx 時間: 2009-10-5 10:56
感謝大大,我再研究看看
歡迎光臨 jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化 (http://jsgears.com/) |
|