如果至少有一个输入不是原始的,我如何将CSS应用于链接,如果所有输入都是原始的,我如何撤销该更改?
How can I apply CSS to a link if at least one input is not original, and undo that change if all inputs are original?
我的页面上有一堆复选框、单选按钮和文本字段。它们都在id后面附加了'_boom'。我想检测这些输入中的任何一个是否不是其原始值,如果是,则将CSS应用于页面上名为"save"的按钮。然后,如果用户恢复了他们所做的任何更改,并且所有输入都具有原始值,那么我希望撤消CSS。
我已经接近下面的代码。假设我选中了3个复选框。选中第一个复选框后,CSS会发生变化。好!我检查第二和第三个方框。CSS保持不变。好!但随后我取消选中其中一个框,CSS恢复。糟糕了!只有当我撤消所有更改时,CSS才会恢复。
$('[id*="_boom"]').change(function() {
var sType = $(this).prop('type'); //get the type of attribute we're dealing with
if( sType === "checkbox" || sType === "radio" ){ //checkbox or radio type
var originalCheckedState = $(this).prop("defaultChecked");
var currentCheckedState = $(this).prop("checked");
if(currentCheckedState !== originalCheckedState){
$("a#save").css("color","#CCCCCC");
}
else {
$("a#save").css("color","black");
}
}
if( sType === "text" ){ //text type
var originalValue = $(this).prop("defaultValue");
var currentValue = $(this).val();
if(currentValue !== originalValue){
$("a#save").css("color","#CCCCCC");
}
else {
$("a#save").css("color","black");
}
}
});
#save {
color: black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" id="check_boom" />
<input type="checkbox" id="check1_boom" />
<input type="checkbox" id="check2_boom" />
<input type="radio" id="radio_boom" />
<input type="text" defaultValue="test" id="text_boom" />
<input type="text" defaultValue="test" id="text2_boom" />
<a href="http://www.google.com" id="save">Save</a>
您的代码中有许多可能的改进,以使其更清晰和标准化。比如,不要依赖id
,你应该考虑class
属性等等……但我不会修改你的代码这是你现有代码的解决方案。
这个想法是循环遍历所有的表单元素,如果至少有一个元素与默认值不同,那么设置标志并退出循环。
最后,检查该标志并相应地设置css。
为此,我将您的元素包含在表单form1
中。
$("#form1 :input").change(function() {
var changed = false;
formElems = $("#form1 :input");
for(i=0;i<formElems.length; i++){
var sType = $(formElems[i]).prop("type");
if(sType === "checkbox" || sType === "radio"){
if($(formElems[i]).prop("defaultChecked") !== $(formElems[i]).prop("checked")){
changed = true;
break;
}
}else if(sType === "text"){
if($(formElems[i]).prop("defaultValue") !== $(formElems[i]).val()){
changed = true;
break;
}
}
}
if(changed){
$("a#save").css("color","#CCCCCC");
}else{
$("a#save").css("color","black");
}
});
这是你的表单
<form id="form1">
<input type="checkbox" id="check_boom" />
<input type="checkbox" id="check1_boom" />
<input type="checkbox" id="check2_boom" />
<input type="radio" id="radio_boom" />
<input type="text" defaultValue="test" id="text_boom" />
<input type="text" defaultValue="test" id="text2_boom" />
<a href="http://www.google.com" id="save">Save</a>
</form>
问题是,当其中一个值改变为原始值时,并不意味着没有变化。
所以,在你的else代码块中,你应该检查所有的输入,如果它们都是原始值,从按钮中删除'save'类,否则,保留它。
var isChanged = function ($element) {
var sType = $element.prop('type');
if (sType === "checkbox" || sType === "radio") {
var originalCheckedState = $element.prop("defaultChecked");
var currentCheckedState = $element.prop("checked");
if (currentCheckedState !== originalCheckedState) {
return true;
} else {
return false;
}
} else if( sType === "text" ) {
var originalValue = $element.prop("defaultValue");
var currentValue = $element.val();
if (currentValue !== originalValue) {
return true;
} else {
return false;
}
}
};
var $inputs = $('[id*="_boom"]');
var isAnyChanged = function () {
$inputs.each(function () {
if (isChanged($(this))) {
return true;
}
});
return false;
};
$inputs.change(function () {
if (isChanged($(this))) {
$("a#save").css("color","#CCCCCC");
} else if (!isAnyChanged()) {
$("a#save").css("color","black");
}
});
相关文章:
- 检测打开新选项卡/窗口的原始选项卡(如果有)
- 遍历JS对象/数组,如果找到匹配项,则更改值并返回原始对象/数组结构
- 如果未处于登录状态,如何重定向到登录页面,登录后重定向到原始页面
- 如果我创建右键单击菜单,如何保留原始复制和粘贴功能
- 如果我希望旋转后所有圆柱体的高度都是固定值,我将如何计算原始高度
- 如果值>变为原始值,则更改文本的颜色,Jquery
- jQuery UI如果移动的距离小于一定距离,则可拖动恢复到原始位置
- 如果我不删除事件处理程序'我不知道用于创建此处理程序的原始选择器
- 修改函数内部的JavaScript对象,如果出现错误,则返回原始对象
- 如果宽度大于原始图像,请更改图像src
- 如果javascript中存在重复,则从数组中删除所有重复和原始元素
- 如果父控件被启用/禁用,如何启用/禁用动态创建的自定义控件(查看原始控件)
- 如何调用Chrome实现的原始' console.log ',如果它已被用户的脚本覆盖
- 如果我在 JavaScript 中拼接克隆的数组,为什么我的原始数组会被拼接
- Ajax get,如果没有找到原始url,则替换url
- 如果.focusout表单不包含值,则恢复为原始值
- 如果array .prototype.slice()方法返回浅拷贝,为什么改变切片数组的值不会改变原始数组
- 如果从Parse Cloud调用外部api,原始主机名是什么?
- 如果未选择选项卡,如何使滑块移动回其原始位置
- 如果图像路径存在,则替换文本,如果不存在则显示原始图像