2011-06-21 62 views
1
$(document).ready(function() { 
    $("img.tile").click(function() { 
    var actid = $(this).data().id; 
    $("#lz").load("/dialog/pre?actid=" + actid); 
    $("#btnCheck").click(function() { 
     alert("test"); 
    }); 
}); 

負載()調用帶來一個具有<input id="btnCheck" value="Check" /> 的HTML片段但是,當我點擊它不會觸發事件。 必須與如何加載片段有關。你如何做這項工作?jQuery的獲得元素的ID的.load()調用之後

+0

如果.load()是異步的,您應該在.load()的回調中添加click處理程序。根據文檔,它看起來就是這樣。 :) – bzlm

回答

4

最好的方法是使用delegate並利用事件冒泡捕獲可能還不存在的元素上的事件。這是很容易的,尤其是當你可以在現有的工作選擇提供上下文:

$(document).ready(function() { 
    $("img.tile").click(function() { 
     var actid = $(this).data().id; 
     $("#lz") 
      .load("/dialog/pre?actid=" + actid) 
      .delegate("#btnCheck", "click", function() { 
       alert("test"); 
      }); 
    }); 
}); 

這是功能上等同於load例子,但將在幾個方面表現略好。

+0

閱讀jQuery上的實況和委託調用的描述。不知道我瞭解其中的差異。爲什麼我們需要兩個電話? – BuddyJoe

+0

@tyndall [所以比較委託和現場活動](http://stackoverflow.com/questions/4204316/jquery-live-vs-delegate)。 「兩個電話」是什麼意思? – lonesomeday

+0

我的意思是兩種方法。現在看另一個問題。 – BuddyJoe

5

正確,您需要在確認數據已加載或使用live事件附加後附加click事件。

$("#btnCheck").live('click', function() { 
    alert("test"); 
}); 

或者,你可以將它,你是確保數據加載之後:如果它發現它現在還是在將來的任何點可能是最容易實現的live將附加的處理程序。正如@bzlm在他的評論中指出load是一個異步事件,所以你不能認爲它已經在任何後續代碼中完成。幸運load允許你傳遞一個功能之後,所有的數據將觸發第二個參數加載:

$("#lz").load("/dialog/pre?actid=" + actid, function() { 
    $("#btnCheck").click(function() { 
     alert("test"); 
    }); 
}); 
+3

*「現場會附加一個處理程序,如果它現在或未來任何時候發現它」*這不是'.live()'的工作方式。它在調用時立即附加處理程序,但它被附加到'document'。 *每次點擊頁面上的*到'document'都會對''#btnCheck''選擇器進行測試,如果匹配,它會調用處理程序。 '.delegate()'方法是一樣的,但是更加本地化,​​因此更受歡迎(無論如何)。 :o) – user113716

1

嘗試:

$(document).ready(function() { 
    $("img.tile").click(function() { 
    var actid = $(this).data().id; 
    $("#lz").load("/dialog/pre?actid=" + actid); 
    $("#btnCheck").live('click', function() { 
     alert("test"); 
    }); }); 

這將拿起添加到DOM之後的任何元素負載事件。更好的方法可能是使用.delegate()

+0

如果代碼在點擊函數之外有$(「#btnCheck」)。live()函數,它應該工作嗎?第二行?它應該是對的?因爲它解釋了剛剛在DOM中出現的東西嗎?無法通過這種方式獲得生活或委託。 – BuddyJoe

+0

沒關係,它工作。錯誤地命名我的按鈕。 – BuddyJoe

+0

謝謝lnrbob +1 – BuddyJoe