jsGears.com 技術論壇 - AJAX, JavaScript, jQuery, 網站開發, 前端效能優化's Archiver

xxoxxoxxoxx 發表於 2009-9-28 12:33

[問題]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]]

wmh 發表於 2009-9-28 22:34

因為你在  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]

xxoxxoxxoxx 發表於 2009-9-28 23:16

[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

wmh 發表於 2009-9-29 08:32

使用 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]

xxoxxoxxoxx 發表於 2009-9-29 09:39

[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種寫法,效能上會有差異嗎?

wmh 發表於 2009-9-29 11:43

理論上使用 live 效能應該比較差一點點,不過差異到底多少,會不會影響使用者的感覺,可能要試過才知道。你可以用大量的 live 去綁定事件來測試看看。

第 2 種寫法應該是 ok 的,很一般的寫法。

xxoxxoxxoxx 發表於 2009-9-29 13:33

我發現若用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]]

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,或許有適合的。
[url]http://www.appelsiini.net/projects/jeditable[/url]
[url]http://www.arashkarimzadeh.com/index.php/jquery/7-editable-jquery-plugin.html[/url]

xxoxxoxxoxx 發表於 2009-10-5 10:56

感謝大大,我再研究看看:loveliness:

頁: [1]

Powered by Discuz! Archiver  © 2001-2009 Comsenz Inc.