Javascript 为什么第三次单击后我的函数不';不行?
我有以下html代码: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']) &&
<?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(' ', ' ', $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);
}
}