Javascript 有时我需要再次单击一个引导复选框按钮。为什么?
这在60%的时间内有效。但有时我需要再次点击按钮。当然,这不会在真实的网络世界中实现。我正在使用一个修改过的引导程序min,它可能是一个不允许使用其他类型按钮的选项。想象一下,它们与“数据颜色=主色”相同。“数据颜色=icomold”是唯一的补充 以下是需要您进行故障排除的重要部件: 按钮Javascript 有时我需要再次单击一个引导复选框按钮。为什么?,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,这在60%的时间内有效。但有时我需要再次点击按钮。当然,这不会在真实的网络世界中实现。我正在使用一个修改过的引导程序min,它可能是一个不允许使用其他类型按钮的选项。想象一下,它们与“数据颜色=主色”相同。“数据颜色=icomold”是唯一的补充 以下是需要您进行故障排除的重要部件: 按钮 <tr> <td colspan="5"> <span class="button-checkbo
<tr>
<td colspan="5">
<span class="button-checkbox">
<button type="button" class="btn" data-color="icomold">Injection Mold</button>
<input type="checkbox" class="hidden"/>
</span>
<span class="button-checkbox">
<button type="button" class="btn" data-color="icomold">Export Mold</button>
<input type="checkbox" class="hidden"/>
</span>
<span class="button-checkbox">
<button type="button" class="btn" data-color="icomold">CNC Plastic</button>
<input type="checkbox" class="hidden"/>
</span>
<span class="button-checkbox">
<button type="button" class="btn" data-color="icomold">CNC Metal</button>
<input type="checkbox" class="hidden"/>
</span>
<span class="button-checkbox">
<button type="button" class="btn" data-color="icomold">Urethane Casting</button>
<input type="checkbox" class="hidden" />
</span>
</td>
</tr>
注射模
出口模具
数控塑料
数控金属
聚氨酯铸件
下面是脚本:
$(function() {
$('.button-checkbox').each(function() {
// Settings
var $widget = $(this),
$button = $widget.find('button'),
$checkbox = $widget.find('input:checkbox'),
color = $button.data('color'),
settings = {
on: {
icon: 'glyphicon glyphicon-check'
},
off: {
icon: 'glyphicon glyphicon-unchecked'
}
};
// Event Handlers
$button.on('click', function() {
$checkbox.prop('checked', !$checkbox.is(':checked'));
$checkbox.triggerHandler('change');
updateDisplay();
});
$checkbox.on('change', function() {
updateDisplay();
});
// Actions
function updateDisplay() {
var isChecked = $checkbox.is(':checked');
// Update the button's color
if (isChecked) {
//We've activated one
//now we need to deactivate the rest of the buttons
//var elm = document.createElement("div");
var y = document.getElementsByClassName('btn btn-icomold active');
var aNode = y[0];
if (typeof (aNode) != "undefined" && $button.context.innerText != aNode.innerText)
{
aNode.className = "btn btn-default";
var state = aNode.childNodes[0]
state.className = "state-icon glyphicon glyphicon-unchecked";
}
$button
.removeClass('btn-default')
.addClass('btn-' + color + ' active');
}
else {
$button
.removeClass('btn-' + color + ' active')
.addClass('btn-default');
}
// Set the button's state
$button.data('state', (isChecked) ? "on" : "off");
// Set the button's icon
$button.find('.state-icon')
.removeClass()
.addClass('state-icon ' + settings[$button.data('state')].icon);
}
// Initialization
function init() {
updateDisplay();
// Inject the icon if applicable
if ($button.find('.state-icon').length == 0) {
$button.prepend('<i class="state-icon ' + settings[$button.data('state')].icon + '"></i> ');
}
}
init();
});
});
$(函数(){
$('.button复选框')。每个(函数(){
//背景
var$widget=$(这个),
$button=$widget.find('button'),
$checkbox=$widget.find('input:checkbox'),
颜色=$button.data('color'),
设置={
关于:{
图标:“glyphicon glyphicon检查”
},
关:{
图标:“glyphicon glyphicon未选中”
}
};
//事件处理程序
$button.on('click',function(){
$checkbox.prop('checked',!$checkbox.is(':checked');
$checkbox.triggerHandler('change');
updateDisplay();
});
$checkbox.on('change',function(){
updateDisplay();
});
//行动
函数updateDisplay(){
var isChecked=$checkbox.is(“:checked”);
//更新按钮的颜色
如果(已检查){
//我们启动了一个
//现在我们需要关闭其余的按钮
//var elm=document.createElement(“div”);
var y=document.getElementsByClassName('btn btn icomold active');
var阳极=y[0];
if(typeof(阳极)!=“未定义”&&$button.context.innerText!=阳极.innerText)
{
阳极.className=“btn btn默认值”;
var状态=阳极。子节点[0]
state.className=“未选中状态图标glypicon”;
}
美元按钮
.removeClass('btn-default')
.addClass('btn-'+颜色+'active');
}
否则{
美元按钮
.removeClass('btn-'+颜色+'active')
.addClass(“btn-default”);
}
//设置按钮的状态
$button.data('状态',(已检查)?“打开”:“关闭”);
//设置按钮的图标
$button.find(“.state图标”)
.removeClass()
.addClass('state-icon'+设置[$button.data('state')].icon);
}
//初始化
函数init(){
updateDisplay();
//如果适用,插入图标
如果($button.find('.state icon')。长度==0){
$button.prepend(“”);
}
}
init();
});
});
以下是修复程序
function updateDisplay(from) {
var isChecked = $checkbox.is(':checked');
isChecked = from;
因此,就我而言,我不在乎原始值是多少。
在Init和一个事件上,我正在发送它需要更改的内容
// Initialization
function init() {
updateDisplay(false);
初始化时为False。。。在“单击”事件中为True。出于我的目的:没有理由有一个松开事件
// Event Handlers
$button.on('click', function() {
$checkbox.prop('checked', !$checkbox.is(':checked'));
$checkbox.triggerHandler('change');
updateDisplay(true);
});
Dossy强调UpdateDisplay已经发生了两次,这在上面值得称赞。
这一部分需要注释掉:
//$checkbox.on('change', function() {
// updateDisplay();
// });
控制台中有错误吗?正常按钮(不是icomold)是否能正常工作?Re:Clint-I已将全部切换为数据颜色=主。同样的问题也在发生。脚本中的“停用”例程可能是罪魁祸首。不会生成任何错误。这里是真正奇怪的部分。出现视觉错误时,按钮将保持灰色高亮显示。好像我还在它上面徘徊。但是,我发现DOM的CSS信息在一个较暗的按钮和下一个按钮之间没有区别。如前所述,如果单击
元素,updateDisplay()
将被调用一次,在按钮的单击处理程序中调用一次,在复选框的更改处理程序中调用一次。执行两次有没有什么意外的后果?我注意到,它确实执行了两次。这段代码来自几个来源。我过去擅长编写脚本,现在才重新开始。实际上,有什么理由我需要两个不同的事件处理程序吗?我将尝试删除复选框1。嗯。。我可以注释掉$checkbox.on('change')。我得到了相同的功能(外观没有变化)。有明显的区别。现在它只命中功能一次。但是问题可能更清楚。不是解决方案(对我来说)。在“失败”时顺序。当它点击“UpdateDisplay”函数“isChecked”时,它会变为false,但它应该变为true。然后它会进入“UpdateDisplay”的“Else”部分。我会评论说,这并没有真正回答前面提到的原始问题。不过,我可以在下周继续完成该页,一切都很好。