您的 JS Fiddle 代码中存在一些问题...
您已经多次定义了函数changeID
(可能针对每个按钮!)。只需要一个函数,该函数可以在同一命名空间的代码中的任何位置多次调用。
您有多个文档就绪jQuery(function($){...})
绑定实例,这不是必需的。所有相关代码都可以组合在一个实例中。
您将 click 元素分别绑定到每个元素。这可以通过单个绑定来完成className
,tagName
或者更好地在.delegated()上绑定到父元素。注意:从 JQuery 1.7delegate
开始,已被.on()方法取代。
您正在使用toggleClass
JQuery 函数。这将仅从单击的元素中添加或删除该类,而不是从其兄弟元素(或其他输入元素)中添加或删除该类。根据我的理解,我认为您想butzz
为单击的按钮添加类并将其从所有其他按钮中删除(如果不是这种情况,请在评论中澄清)。这可以通过removeClass
对所有按钮和addClass
单击元素的方法来完成。
我已经更新了你的小提琴以反映所有这些变化。
更新小提琴
至于继承css
规则,您应该知道孩子的规则总是优先的,相同元素的冲突样式也会按照它们在列表中出现的顺序应用。例如,在下面的代码中,两个类都用于相同的元素,如果一起应用,规则 from.butzz
将在.butz
.
.butz {
background-color: red;
}
.butzz {
background-color: green;
}
有时,当任一开发人员无法控制所有 css 样式或由于其他一些不可避免的原因而无法使用 css!important
标识符的灵活性时。尽管应该非常谨慎地使用它,因为它会覆盖同一元素的其他冲突规则,但可能会破坏某些样式并使未来在 css 中的添加令人沮丧。
.butzz {
background-color: green !important;
/*it will override all other backgroung-color specifications for the element*/
}
编辑:
通过您网站的代码,我发现您将 JQuery 绑定到 ready 函数中作为闭包。您可能会收到“$ 不是函数”错误。将changeID
函数移动到文档就绪块内。同时删除所有重复的代码。它将为您节省大量宝贵的调试时间。
jQuery(function($){
function changeID(elm){
$('.butz').removeClass('butzz');
$(elm).addClass('butzz');
}
$('.butz').on('click',function(){
$('#design_choice').val($(this).prev().val());
changeID(this);
});
});
试试看。
编辑:
您没有为butzz
类定义任何 CSS 规则!在 head 部分的样式声明中添加规则。
.butzz {
background-color: yellow;
}
此外,您的结构<br>
在文本框和按钮之间有一个标签。利用
$(this).siblings('input[type="text"]').val()
代替
$(this).prev().val()
这会将点击绑定功能的第一行更改为
$('#design_choice').val($(this).siblings('input[type="text"]').val());
.prev()
。兄弟姐妹()