2012-04-18 48 views
0

好了,在這裏我們去...中的Javascript JQuery的工作不加載DIV

我有一個頁面XYZ與同時應該打電話給我的功能按鈕:

$(function() { 


    $('#addgroupicon').on('click', function(event){ 

     addgroup(); 

    }); 

}); 


function addgroup() 
{ 
$('#addgroupdialog').show(); 
} 

// #addgroupdialog和# addgroupicon在加載的頁面內,上面的代碼在.js文件中,我加載在index.html的頭文件中。現在我使用.load()函數將XYZ加載到div中,但是當我點擊按鈕沒有任何反應。我也嘗試添加onclick ='javascript:addgroup();'到按鈕,沒有成功。

任何人都可以幫助我嗎?

+0

我認爲你需要的頁面加載完成後,該 – 2012-04-18 04:39:41

+2

你加入DIV使用eval與addgroupicon?這可能是你的問題。加載元素後添加該代碼。 – 2012-04-18 04:41:53

+0

你指定在你的html文件中使用jquery嗎?另外,使用'$(document).ready({...})'代替 – 2012-04-18 04:43:23

回答

4

你沒有以正確的方式使用"on"。應該像這樣使用:

$(document).on("click", "#addgroupicon", function(event){ 
     addgroup(); 
}); 

請參閱下小提琴模仿你的情況,我認爲正是:

http://jsfiddle.net/U4xZj/

要解釋爲什麼,因爲我不認爲jQuery的docs在這方面做得非常好... 基本上,如果你想想你用「於」做什麼你的方式使用它:

$('#addgroupicon').on('click', function(event){ 

你說,好jQuery的,我想創建以下選擇一個事件處理程序,「addgroupicon」。 Jquery迅速轉身走向「太棒了!」 #addgroundicon具有與其匹配的完全ZERO項目。走開,停止打擾我。但隨着$(文件)做第一,jQuery的推移,「哦,好的。我當然可以創建文檔單擊事件處理程序。現在,如果你只希望我引發此事件,當某些元素造成點擊,然後請提供一個選擇器,如果選擇器與源元素匹配,那麼我會打電話給你的回調。「合理?

+0

我可以看到這是一個類似的情況,但由於某種原因,它只是不會在我的代碼 – 2012-04-18 06:11:37

+0

工作我正在調用$(function(){在另一個.js中,現在我在那裏插入了代碼,它工作得很好。 顯然$(function(){只能被調用一次 謝謝! – 2012-04-18 06:17:38

2

試試這個。如果您在頁面加載後調用元素,則需要使用.live()。

$(function() { 


    $('#addgroupicon').live('click', function(event){ 

        addgroup(); 

    }); 

}); 
+0

我使用JQuery的1.7,.live()在這裏 – 2012-04-18 04:47:40

+1

棄用這是行不通的,這指的是文檔巫心不是#addgroupicon'$(本/ *或文檔的子節點,如果刨不把它周圍的dom- ('click','#addgroupicon',function(){})' – voigtan 2012-04-18 05:16:46

0
  1. 沒見過$(function() {}),請嘗試使用$(document).ready({})

  2. 以$(文件)。就緒({}),您的JS代碼頁之後將運行加載,如果addgroupicon現在還沒有,點擊事件不會綁定到它。因此,如果您稍後添加addgroupicon,則必須在添加代碼後運行該代碼。

  3. 爲什麼不使用簡單$('#addgroupicon').click(function(event){})

+0

$(function(){});和.ready()一樣。這是「速記」版本。 – sbeliv01 2012-04-18 04:53:10

+0

我的網站由100多個頁面組成,大約有一半有這個和其他按鈕,需要調用各自的功能,因此單獨添加到每個頁面不能成爲我的智能解決方案。 我知道。點擊是一樣的,只是想清楚,我不是使用舊的點擊,但。對()函數。 – 2012-04-18 04:54:05

+0

你可以在你的load()函數中調用它。根據[this](http://api.jquery.com/load/)加載可以具有加載完成後啓動的回調函數 – 2012-04-18 04:57:27

0

可以使用.bind()方法,而不是.live()

$(function() {  
    $('#addgroupicon').bind('click', function(event){ 
     addgroup(); 
    }); 
}); 
+0

我們應該使用'on'。 看到這, http://api.jquery.com/delegate/ 和 http://api.jquery.com/on/ – Jashwant 2012-04-18 05:15:22

0

嘗試使用live()而不是bind()作爲按鈕。

+0

http://api.jquery.com/live 不使用'live',它的過時,用'on'代替 http://api.jquery.com/on/ – Jashwant 2012-04-18 05:14:41

0

我沒有完全理解你的問題,但如果live()解決了你的問題,並且如果你不使用它,因爲它已被棄用。

這裏的路要走,

$("body").on("click", "#addgroupicon", function(event){ 
    addgroup(); 
}); 

參見: http://api.jquery.com/on/

0

好奇,爲什麼你使用。對()不會做這?

$('#addgroupicon').click(function(){ 
    $('#addgroupdialog').show(); 
});