2010-09-28 56 views
6

jsFiddle爲什麼不能通過jQuery動態創建這個複選框?

我正在使用允許用戶在區域中繪製框的jQuery插件。我使用jQuery在用戶放開鼠標按鈕(這是朝向jsFiddle中的javascript的底部)出現的框中放置複選框(以及下拉列表)。問題是,複選框不可點擊。

我確實有一些點擊_mouseStart_mouseDrag_mouseStop事件校驗碼從當你在現有的中單擊創建停止另一個盒子,但我不認爲這是造成問題,因爲下拉列表被創建可以被點擊,而且如果你刪除點擊檢查代碼,複選框仍然是不可點擊的。

是什麼導致複選框不可點擊?謝謝閱讀。

編輯: 由於VinayC的回答,我現在可以看到的是,點擊到達複選框,使用此代碼:

$('#box').click(function(e){ 
    alert('clicked'); 
    $(this).attr('checked', true); 
}); 

$(this).attr('checked', true);行不會使選中複選框。誰能告訴我爲什麼?我已更新了jsFiddle

編輯2: Harmen注意到代碼爲每個複選框分配了相同的ID。在實際的代碼中有一個附加到id的計數器,所以每個計數器都是唯一的,但是我已經將其解決了,因爲我認爲這只是一個jQuery問題。我會改變jsFiddle,但如果你只是創建一個盒子(因此一個複選框),同樣的問題發生。

+0

該插件似乎是給你造成各種麻煩! – alex 2010-09-28 06:22:33

+0

@alex:好的!希望我知道有足夠的jQuery來製作我自己的。 – ben 2010-09-28 06:24:14

回答

3

我有不知道爲什麼,但在擺弄周圍(是的,在fiddlejs),這個建立框時,似乎這樣的伎倆

$('#box', ui.box).click(
     function(evt){ 
      evt.stopPropagation(); 
     } 
    ); 

。見:http://jsfiddle.net/BBh3r/9/

我實際上是想攔截事件並手動設置它檢查,但如果沒有必要設置它然後嘿..也許有一個額外的事件產生的地方否定第一.. ..?點擊只觸發一次。

可能與building jquery checkbox - can't set checked value

PS。僅在Chrome上針對Linux進行測試

+0

謝謝sagen!我一直在扯掉我的頭髮,但現在效果很好。 – ben 2010-09-28 07:38:59

+0

很高興我能幫忙:) – 2010-09-28 07:40:26

1

看來頂級事件處理程序正在取消點擊事件。在複選框元素警報上添加onclick事件處理程序,您將看到點擊到達複選框。

+0

感謝您的回答,現在我看到點擊到達複選框。但是我仍然無法設置複選框,我編輯了這個問題。 – ben 2010-09-28 07:15:46

1

您正在使用相同的id創建多個複選框。

+0

啊,謝謝你。實際上我並沒有真正的代碼,因爲我在每個外部代碼的基礎上添加了一個計數器,只是因爲它會讓事情混淆不清,而這似乎只是一個jQuery問題。不過,如果您只創建一個盒子,則會出現相同的問題,並且只有一個複選框。感謝您的提貨,但我會將其編輯到問題中。 – ben 2010-09-28 07:25:58

1

實際上,在警報可見時進行檢查,但隨後會變爲未選中狀態。我猜你的事件處理程序將它設置爲檢查後,點擊的默認事件(即切換複選標記)發生,並且由於此時被檢查,它再次被取消選中。嘗試從點擊處理程序調用preventDefault

0

你也可以試試這個更通用的方法

這對我有效。

$(document).click(function (e) { 
    if (element.tagName == 'INPUT') { 
     if ($(element).attr("type") == 'checkbox') { 
     e.stopPropagation();         
     e.preventBubble();        
     return; 
     } 
    } 
});