2011-08-19 78 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"); 
} 
}