2012-04-23 53 views
-1

有誰知道我在做什麼錯在這裏?基本上,我有這個spanclickhandler。加載頁面時,類officeapprovalspan上的任何內容都會將其分配給其單擊事件。那裏沒有問題。Javascript錯誤,當我嘗試添加單擊事件跨度

在另一個地方,我的代碼:

$(this).replaceWith('<span class="officeapprovalspan">wero<span>'); 
$(document).on('click', '.officeapprovalspan', spanclickhandler); 

所以我這個類的一個新跨越替換一些HTML。我使用on將點擊事件添加到類officeapprovalspan的跨度。我收集我必須這樣做,因爲新的跨度不會附加到它的點擊處理程序。

所以這是好的,但是當我點擊新跨越我得到這個錯誤:

enter image description here

任何人都知道我做錯了,如何解決?

+1

'。點擊()'返回了jQuery它被調用的對象,而不是函數。然後你試圖使用這個jQuery對象作爲事件處理程序。這就像你叫'$(document).on('click','.officeapprovalspan',$('。officeapprovalspan'));'這沒什麼意義。 – 2012-04-23 21:29:42

+0

我會看看使用循環功能。 'for(var i = 0,len = var.length; i 2012-04-23 21:40:02

回答

1

click方法不返回事件處理程序,它返回jQuery對象。首先定義事件處理程序,在點擊的方法使用它:

var spanclickhandler = function() { 
    ... 

    do some stuff 

    ... 
}; 

$('.officeapprovalspan').click(spanclickhandler); 
1

這個代碼塊不會做你認爲它(我敢肯定,沒有返回處理函數):

var spanclickhandler = $('.officeapprovalspan').click(function() { 
    ... 

    do some stuff 

    ... 
}); 

我建議你這樣的代碼吧,這應該工作:

var spanclickhandler = function() { 
    ... 

    do some stuff 

    ... 
} 

$('.officeapprovalspan').click(spanclickhandler); 
+0

是的,你gessed是正確的,'click'方法不返回函數,它返回它使用的jQuery對象。 – Guffa 2012-04-23 21:50:11

0

spanclickhandler在這種情況下返回一個jQuery對象,$('.officeapprovalspan')。您需要創建一個單獨的函數或使用事件namescapes。

1

你想要做的是:

var spanclickhandler = function() { 
     ... 

     do some stuff 

     ... 
}; 

$(this).replaceWith('<span class="officeapprovalspan">wero<span>'); 
$('.officeapprovalspan').on('click', spanclickhandler); 

或更好

$(document).on('click', '.officeapprovalspan' function() { 
     ... 

     do some stuff 

     ... 
}); 
// Because 'on' will attach event on DOM element even if they are not created yet, if you define a selector descendant inside. You can replace `document` by the nearest top parent of all your `.officeapprovalspan` and it will improve performance. `document` is not really optimal here 
$(this).replaceWith('<span class="officeapprovalspan">wero<span>'); 
+0

不,在使用它時,'on'方法將* not *事件添加到尚不存在的元素上。爲此,您必須使用委託語法,並將其附加到已存在的父元素。 – Guffa 2012-04-23 21:40:03

+0

似乎是這樣,我更新了帖子,謝謝@Guffa – Tronix117 2012-04-23 21:59:01

0

你能不能做到這一點:

$(this).replaceWith('<span class="officeapprovalspan">wero<span>').click(spanclickhandler);