2011-08-19 75 views
0

我想在Javascript中爲HTML複選框創建一個切換函數,如果複選框被選中/未選中,javascript檢測到if語句並執行相應的操作(在這種情況下,添加/刪除一個參數到網址,並用一組新的結果刷新頁面)Javascript不識別初始複選框的值

現在,我只是試圖通過檢查框時檢測到彈出警報的JavaScript切換功能/選中。

這裏是JavaScript的:

<script type="text/javascript" language="javascript"> 
function filterToggle(attribName) 
{ 
    var elementII = document.getElementById(attribName); 
    if(elementII.checkedTag == "unchecked"){ 
    elementII.checkedTag = "checked"; 
    alert("checked"); 
    } 
    else { 
    elementII.checkedTag = "unchecked"; 
    alert("unchecked"); 
    } 
} 
</script> 

而這裏的複選框被創建多次,其中,一個PHP foreach循環中:

$BODY .= sprintf("<input type=\"checkbox\" onclick=\"filterToggle('%s')\" name=\"%s\" value=\"%s\" id=\"%s\" checkedTag=\"unchecked\"/> %s ", 
       $attribName, $attribName, $attribClass, $attribName, $attribName, $attribName); 

所以這裏的想法是箱子應在加載頁面未經檢查(他們是),當我檢查它們時,警報應該說「檢查」,並且當我取消選中時,警報應該說「未檢查」。這裏的一切都很完美,除了這個事實,當我現在勾選這些框時,他們會說「未檢查」,而當我取消選中時,他們會說「已檢查」。所以看起來JavaScript正在改變checkedTag屬性在複選框中的值,並作出相應的響應,,但它沒有認識到複選框的值最初設置爲「未選中」的事實,因此,而不是將其設置爲未選中並在第一次點擊時提醒「未檢查」,因爲它目前看起來正在做,它應該將其設置爲「檢查」並提醒「檢查」。

這裏有什麼想法嗎?我無法弄清楚爲什麼它沒有認識到初始值 - 在checkedTag值附近嘗試了雙引號,單引號,沒有引用...相同的結果。

以下是JSFiddle中的一些示例輸出代碼 - http://jsfiddle.net/intenex/s45JC/3/,其中3個複選框顯示上述錯誤。

謝謝!

回答

2

只是不要添加任何checked屬性到不應該檢查的元素。

你讓它變得複雜得多。代替添加自定義屬性的,測試DOM元素的屬性checked

實施例:

HTML

<input type="checkbox" onchange="filterToggle(this)" name="Below $110" value="Price Range" id="Below$110" /> 

的JavaScript

function filterToggle(element) { 
    if(element.checked){ 
    alert("checked"); 
    } 
    else { 
    alert("unchecked"); 
    } 
} 

DEMO

注意:元素id s不能包含空格。

1

http://jsfiddle.net/efortis/VqyLY/

jQuery的方式

$('input').change(function() { 
    alert("Is checked? " + $(this).is(':checked')); 
}); 

編輯

這裏是http://jsfiddle.net/efortis/s45JC/4/你的榜樣工作

$('input').change(function() { 
    alert("Hello... " + $(this).attr('id')); 
}); 
+0

我開始使用jQuery和有一堆的問題 - http://stackoverflow.com/questions/7032748/jquery-function-not-executing-inside-php-foreach-loop 這個問題是後來的道路我需要jQuery是特定於每個複選框作爲當每個複選框被選中時,該複選框的唯一參數將被插入到URL中以重新加載一個xml結果頁面,我不確定如何在jQuery中做到最好。任何幫助將不勝感激那裏,謝謝! – Intenex

+0

看到我的編輯,你可以添加一個類來輸入你想要的,而不是所有的,然後將'$('input')'改爲'$('。myClass')'。你可以看到每個複選框都返回它的ID,因爲我使用了'$(this)'。 –

1

在什麼地方checkedTag從何而來?它不是DOM的一部分。您應該使用checked屬性。

+0

如果我使用「checked」屬性,我該如何取消勾選複選框以開始?與checked =「」或checked =「unchecked」,複選框仍然被預先檢查並且相應地調整後javascript不起作用 - http://jsfiddle.net/intenex/s45JC/5/ – Intenex

+0

標記中沒有選中的屬性。複選框默認未選中。見http://www.w3schools.com/tags/tag_input.asp – SJuan76

1

確保包括了var elementII =的document.getElementById(元素),作爲元素的ID是不一樣的一樣的元素本身

function filterToggle(element){ 
var elementII = document.getElementById(element) 
if(elementII.checked){ 
alert("Checked"); 
} 
else{ 
alert("Unchecked"); 
} 
}