2014-07-25 65 views
2

我的代碼很簡單,但行print("checky changed")未運行。因爲在註冊onChange聽衆後,當複選框的選中狀態發生變化時,應該打印一條消息,我將更改複選框的選中狀態兩次:第一次直接,然後在Timer之後三秒鐘執行,每隔時間與不同的價值觀。CheckboxInputElement.onChange事件未觸發

如果手動選中或取消選中該複選框,將打印該信息。

我真的需要幫助解決這個問題:當checky.checked的值以編程方式更改時,爲什麼"checky changed"從不打印?

我有這樣的HTML代碼:

<!DOCTYPE html> 

<html> 
    <head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <title>Test</title> 

    <script async type="application/dart" src="script.dart"></script> 
    <script async src="packages/browser/dart.js"></script> 
    </head> 
    <body> 
    <h1>Test</h1> 

    <input type="checkbox" id="checky"> 
    </body> 
</html> 

這飛鏢代碼:

import 'dart:html'; 
import 'dart:async'; 

void main() { 
    CheckboxInputElement checky = querySelector('#checky'); 

    checky..checked = true 
     ..onChange.listen((_) { 
    print("checky changed"); 
    }); 

    checky.checked = false;  
    new Timer(const Duration(seconds: 3),() { 
    checky.checked = true;  
    }); 
} 

非常感謝你對任何形式的幫助!

回答

2

onchange的forms選項不會以編程方式觸發。 您需要在更改checked屬性後執行on change方法。 勒布

+0

但我想它以編程火(像它的時候我手動選中或清除鼠標複選框)。 – silviubogan

2

您可以調度手動onChange事件:

import 'dart:html'; 
import 'dart:async'; 

void main() { 
    CheckboxInputElement checky = querySelector('#checky'); 
    checky 
     ..checked = true 
     ..onChange.listen((_) { 
     print("checky changed"); 
     }); 
    new Timer(const Duration(seconds: 1),() { 
    checky.dispatchEvent(new Event("change")); 
    checky.checked = !checky.checked; 
    }); 
} 
+0

這個功能很好,但我必須提到,我把'checky.dispatchEvent(new Event(「change」));'checky.checked =!checky.checked;'後面的行放在了'因爲我想要'change'事件在改變之後,而不是在改變之前派遣*。我仍然在等待答案,解釋爲什麼事件沒有按照預期自動正常調度,也是爲了checky.checked的程序化改變。我真的很感謝你!你的回答是有幫助的,因爲它使我的代碼運行! (我投了票) – silviubogan

+1

@silviubogan它不應該通過設計對它的值進行編程改變來觸發(同樣適用於Javascript) – JAre

+0

如果這是真的,我需要知道什麼事件是由複選框的'檢查'屬性,因爲我想監視它的所有更改。 – silviubogan