2013-03-21 49 views
1

我有一個問題,我有以下標記:防止嵌套的標籤鏈接,但變化選擇框狀態

<input type="checkbox" id="foo" /> 
<label for="foo"> 
    <a href="http://www.google.com"> 
     Checkbox text 
    </a> 
</label> 

的標籤已經萬一嵌套錨用戶沒有啓用javascript,和在這種情況下,他們將在點擊標籤時跟隨鏈接。

我有以下的javascript/jQuery來防止鏈接點擊,並顯示出當複選框狀態改變警報:點擊複選框選中狀態ISN的標籤時

$(function(){ 
    $("label a").click(function(e){ 
     e.preventDefault(); 
    }); 
    $("#foo").change(function(){ 
     alert("checkbox changed"); 
    }); 
}); 

-- See Example --

然而沒有改變。

我知道我可以黑客的代碼,並試圖通過添加代碼來設置檢查狀態來模擬本地瀏覽器功能,但是我寧願使用本地功能而不是模擬它。

我怎樣才能得到複選框來改變狀態,而沒有按照鏈接,並沒有設置使用JavaScript的選中狀態?

回答

1

有點糊塗這裏and without setting the checked state using javascript? ... 但我認爲你是在談論trigger() ...

$("label a").click(function(e){ 
    var $foo = $("#foo"); 
    $foo.attr("checked", !$foo.attr("checked")); 
    $foo.trigger('change'); 
    return false; 
}); 

fiddle

+1

我沒想到用'trigger',感謝!我已更新您的答案,以在觸發前更改已選狀態。這不是我以前的完美解決方案,但我認爲這是您可以通過標籤中的嵌套鏈接獲得的最佳解決方案。 – Curt 2013-03-21 12:37:31

+0

很酷..謝謝.. :) :) .. – bipen 2013-03-21 12:55:22