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