2014-09-19 52 views
0

我想使用checkbox来显示服务在运行时是否正在运行,如果未运行则显示未运行,这是我的复选框。复选框更改被检测两次

<input id="controller" type="checkbox" class="switch-small" checked > Controller 

enter image description here

然后我使用这个JavaScript捕获事件。

在下面的代码中,我想知道服务是否正在运行,因此我可以正确更改其状态,例如,如果选中,用户点击它,他想停止服务,反之亦然。

var state = false; 
if ($('#controller').prop('checked')){ 
    state = true; 
} 

但什么是错在我下面的代码,因为change被称为两次,我不知道为什么会这样,我想只是调用一次。

$(document).ready(function() { 

    $('#controller').change(function() { 

     if (!state){ 
      alert("ON"); 
     } else { 
      alert("OFF"); 
     } 

     if ($('#controller').prop('checked')){ 
      state = true; 
     }else{ 
      state = false; 
     } 

    }); 
}); 

我所有的组件都有唯一的ID。 任何想法为什么会发生这种情况?

+1

我没有看到任何东西马上你的代码错误。你可以创建一个小提琴(或内置SO例子)? – j08691 2014-09-19 15:53:35

+0

你在这里发布的代码似乎没有任何问题,是否有可能从你那里弄到一个小提琴,这样我们可以进一步检查? – artm 2014-09-19 15:54:11

+0

你的代码似乎工作([fiddle](http://jsfiddle.net/m0spgbbp/1/))。注意它可以被简化([fiddle](http://jsfiddle.net/m0spgbbp/))。 – Oriol 2014-09-19 15:55:09

回答

1

var state; 
 
$('#controller').click(function() { 
 
    state = this.checked; 
 
    alert(state ? "ON" : "OFF"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 
<label> 
 
    <input id="controller" type="checkbox" class="switch-small" checked="checked" /> 
 
    Controller 
 
</label>

+1

谢谢先生! – 2014-09-19 17:08:10