Javascript 为什么第三次单击后我的函数不';不行?

Javascript 为什么第三次单击后我的函数不';不行?,javascript,php,jquery,Javascript,Php,Jquery,我有以下html代码: <?php foreach ($this->tags as $uri=>$tag){?> <input type="checkbox" name="tags[]" style="display: none;" value="<?php echo $uri;?>" id="create_<?php echo $uri;?>" <?php echo isset($args['tags']) &&

我有以下html代码:

<?php foreach ($this->tags as $uri=>$tag){?>
    <input type="checkbox" name="tags[]" style="display: none;" value="<?php echo $uri;?>" id="create_<?php echo $uri;?>" <?php echo isset($args['tags']) && in_array($uri, $args['tags'])?'checked="checked"':'';?> />
    <span onclick="selectTag(this.id)" id="create_<?php echo $uri;?>" for="create_<?php echo $uri;?>" class="tag <?php echo isset($args['tags']) && in_array($uri, $args['tags'])?'selected':'';?>"><?php echo str_replace(' ', '&nbsp;', $tag);?></span>
<?php }?>
当我单击跨度框时,选择该框,当我再次单击该框时,它将取消选择该框。问题是,第三次之后,它就停止工作了


我的代码不起作用有什么问题?

您给了
输入
span
相同的
id
属性。每个元素的ID必须是唯一的;您不能让
输入
span
具有相同的
id
。这样做会导致各种各样的问题,包括你正在经历的行为。给其中一个稍有不同的
id
(比如
create\u span


另外,正如@xDaevax所说,你应该使用
.prop
而不是
.attr
——我在使用
.attr
时遇到了同样的问题,你给
输入和
span
赋予了相同的
id
属性。每个元素的ID必须是唯一的;您不能让
输入
span
具有相同的
id
。这样做会导致各种各样的问题,包括你正在经历的行为。给其中一个稍有不同的
id
(比如
create\u span


另外,正如@xDaevax所说,你应该使用
.prop
而不是
.attr
——我在使用
.attr
时遇到了同样的问题,你给
输入和
span
赋予了相同的
id
属性。每个元素的ID必须是唯一的;您不能让
输入
span
具有相同的
id
。这样做会导致各种各样的问题,包括你正在经历的行为。给其中一个稍有不同的
id
(比如
create\u span


另外,正如@xDaevax所说,你应该使用
.prop
而不是
.attr
——我在使用
.attr
时遇到了同样的问题,你给
输入和
span
赋予了相同的
id
属性。每个元素的ID必须是唯一的;您不能让
输入
span
具有相同的
id
。这样做会导致各种各样的问题,包括你正在经历的行为。给其中一个稍有不同的
id
(比如
create\u span


另外,正如@xDaevax所说,您应该使用
.prop
而不是
.attr
——我在使用
时也遇到了同样的问题。attr
JQuery现在有了一个prop方法,它是使用attr方法的更好的替代方法

尝试用
attr(“选中”,true)替换您的呼叫调用
prop(“选中”,true)

有关道具的文档,请参见此处:

以下是两人之间的讨论:

编辑:

另外,正如Ed Cottrell所说,您希望页面上所有元素都具有唯一的id属性

Edit2:


我创建了一个fiddle来演示这种用法:

JQuery现在有了一个prop方法,它是使用attr方法的更好的替代方法

尝试用
attr(“选中”,true)替换您的呼叫调用
prop(“选中”,true)

有关道具的文档,请参见此处:

以下是两人之间的讨论:

编辑:

另外,正如Ed Cottrell所说,您希望页面上所有元素都具有唯一的id属性

Edit2:


我创建了一个fiddle来演示这种用法:

JQuery现在有了一个prop方法,它是使用attr方法的更好的替代方法

尝试用
attr(“选中”,true)替换您的呼叫调用
prop(“选中”,true)

有关道具的文档,请参见此处:

以下是两人之间的讨论:

编辑:

另外,正如Ed Cottrell所说,您希望页面上所有元素都具有唯一的id属性

Edit2:


我创建了一个fiddle来演示这种用法:

JQuery现在有了一个prop方法,它是使用attr方法的更好的替代方法

尝试用
attr(“选中”,true)替换您的呼叫调用
prop(“选中”,true)

有关道具的文档,请参见此处:

以下是两人之间的讨论:

编辑:

另外,正如Ed Cottrell所说,您希望页面上所有元素都具有唯一的id属性

Edit2:



我创建了一个fiddle来演示这种用法:

您的devtools控制台上有一些错误?@FelipeKM,没有,没有任何错误您尝试过使用JQuery prop方法而不是attr吗?例如:$(输入).prop(“选中”,为真);您的js看起来不错,似乎是php方面的东西,我刚刚将php标记添加到您的question@xDaevax哇,我真不敢相信那是真的!!非常感谢。发布您的答案您的devtools控制台有一些错误?@FelipeKM,没有,没有任何错误您尝试过使用JQuery prop方法而不是attr吗?例如:$(输入).prop(“选中”,为真);您的js看起来不错,似乎是php方面的东西,我刚刚将php标记添加到您的question@xDaevax哇,我真不敢相信那是真的!!非常感谢。发布您的答案您的devtools控制台有一些错误?@FelipeKM,没有,没有任何错误您尝试过使用JQuery prop方法而不是attr吗?例如:$(输入).prop(“选中”,为真);您的js看起来不错,似乎是php方面的东西,我刚刚将php标记添加到您的question@xDaevax哇,我真不敢相信那是真的!!非常感谢。发布您的答案您的devtools控制台有一些错误?@FelipeKM,没有,没有任何错误您尝试过使用JQuery prop方法而不是attr吗?例如:$(输入).prop(“选中”,为真);哟
function selectTag(id) {
    var input = '.tags input#'+id;
    var span = '.tags span#'+id;
    if ($(input).is(':checked') && $(span).hasClass('selected')) {
        $(span).removeClass('selected');
        $(input).attr('checked', false);
    }
    else {
        $(span).addClass('selected');
        $(input).attr('checked', true);
    }
}