我有一系列复选框,需要在状态为:checked
时显示输入。
复选框的ID明显不同于相应的文本输入,因此我尝试使用.replace
编辑我设置的变量,以便定位相应的输入。
复选框父ID的结构为icon-metro-NAME
,文本输入为'input-NAME`。
以下是我的代码部分,然后是整个代码:
jQuery('input[type="checkbox"]').each(function () {
var checkbox = jQuery(this);
var checkboxParentID = jQuery(this).parent().attr('id');
var inputName = checkboxParentClass.replace(icon-metro, 'input');
尝试将input[type="checkbox"]
设置为this
,然后找到它的父元素ID并将其设置为checkboxParentID
。然后,我使用checkboxParentID
并将icon-metro
替换为input
,以便定位相应的文本输入字段。
checkbox.change(function () {
if (jQuery(this).is(":checked")) {
jQuery(this).parent('.metro-icon').addClass('active');
jQuery(inputName).toggle('slow');
} else {
jQuery(this).parent('.metro-icon').removeClass('active');
jQuery(inputName).toggle('slow');
}
});
});
然后我检测复选框的:checked
状态,如果选中它,我将active
类添加到它的父.metro-icon
元素中。之后,我从变量中找到:checked
元素对应的文本输入inputName
并切换其可见性。否则,如果未选中,则从其父级中删除active
类,并切换/隐藏相应的文本输入。
完整代码:
jQuery('input[type="checkbox"]').each(function () {
var checkbox = jQuery(this);
var checkboxParentID = jQuery(this).parent().attr('id');
var inputName = checkboxParentClass.replace(icon-metro, 'input');
checkbox.change(function () {
if (jQuery(this).is(":checked")) {
jQuery(this).parent('.metro-icon').addClass('active');
jQuery(inputName).toggle('slow');
} else {
jQuery(this).parent('.metro-icon').removeClass('active');
jQuery(inputName).toggle('slow');
}
});
});
我意识到这可能是一团糟。我正在挑战自己,以获得更高级的jQuery。
答案 0 :(得分:2)
你真是太近了。
您正在字符串上使用jQuery函数!这是你的错误
请检查:http://jsfiddle.net/eFtWh/1/
而不是:
inputActualName.toggle('slow');
做:
$(inputActualName).toggle('slow');