2014-09-19 83 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