返回列表 發帖

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

因為你在  document ready 時寫觸發,但是那時候的 id「aaa」並不存在,有兩種做法:

  • 在 ajax success 的 callback 內寫觸發 event
  • 如果是用 jquery 1.3 以上的版本,可以改用 live() 寫觸發 event,一開始 #aaa 不存在也沒關係
To infinity and beyond!

TOP

原帖由 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大 更棒

    TOP

    使用 live 應該是把 event handler 綁在 document.body,所以即使 element 一開始不存在,等 element 出現時馬上就有作用,其實是 document.body 的事件驅動,藉此模擬該 elment 的事件驅動。

    在 callback 內才 bind 大致像這樣:
      success: function(content) {
        $("#mDiv").html(content);
        //這時才去 bind
        $('#aaa').click(function() {...});
      } 
    
    To infinity and beyond!

    TOP

    原帖由 wmh 於 2009-9-29 08:32 發表
    使用 live 應該是把 event handler 綁在 document.body,所以即使 element 一開始不存在,等 element 出現時馬上就有作用,其實是 document.body 的事件驅動,藉此模擬該 elment 的事件驅動。

    在 callback 內才 bind 大致像 ...


    原來是這樣,感謝大大

    請教大大,若live使用太多效能會不會比較差呢?

    這2種寫法,效能上會有差異嗎?

    TOP

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

    第 2 種寫法應該是 ok 的,很一般的寫法。
    To infinity and beyond!

    TOP

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

    TOP

    我是沒試過,不過如果用 live 不支援 focus 和 blur 的話,就得用正常的方式綁定事件囉。

    多組的話就寫多次即可。不過是要觸發 div 的什麼呢?
    To infinity and beyond!

    TOP

    感謝大大回復,多組的資料是用php印出來的
    想說資料如果變多的話,寫多個好像沒效率...
    主要是傳出來的資料,旁邊搭配一個按鈕,click後觸發該div變成一個input text
    裡面則是原本div的text

    不知道大大懂我的意思嗎?所以若10筆資料,不就要寫10個click觸發

    TOP

    寫 10個 click 觸發還 ok 啦,不過如果設計成用共一個 handler 來處理會比較好。

    如果你要做 editable textbox 可以找現有的 jquery plugin,或許有適合的。
    http://www.appelsiini.net/projects/jeditable
    http://www.arashkarimzadeh.com/i ... -jquery-plugin.html
    To infinity and beyond!

    TOP

    返回列表 回復 發帖