2014-07-25 5 views
2

내 코드는 간단하지만 행 print("checky changed")은 실행되지 않습니다. 체크 박스의 체크 된 상태가 변경되었을 때 메시지를 출력해야하는 onChange 청취자를 등록한 후에 체크 박스의 체크 된 상태를 두 번 변경하기 때문에 실행해야합니다 : 처음에는 직접 입력 한 후 Timer에서 3 초 후에 실행합니다. 다른 값을 가진 시간.CheckboxInputElement.onChange 이벤트가 트리거되지 않았습니다

확인란을 수동으로 선택하거나 선택 취소하면 메시지가 인쇄됩니다.

정말로이 문제에 대한 도움이 필요합니다. checky.checked의 값이 프로그래밍 방식으로 변경되면 "checky changed" 메시지가 인쇄되지 않는 이유는 무엇입니까?

<!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;  
    }); 
} 

도움이 모든 종류의 주셔서 대단히 감사합니다

나는이 HTML 코드가 있습니다!

답변

2

폼 옵션 onchange는 프로그래밍 방식으로 실행되지 않습니다. 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.checked =! checky.checked; '뒤에'checky.dispatchEvent (new event ("change")); 변경 직후가 아니라 변경 직후에 파견되어야한다. 나는 여전히 이벤트가 정상적으로 자동으로 디스패치되지 않는 이유를 설명하는 답변을 기다리고 있으며, checky.checked의 프로그래밍 방식의 변경에 대해서도 예상대로 자동으로 진행됩니다. 정말 고마워! 귀하의 답변은 도움이 되었기 때문에 제 코드가 실행되었습니다! (나는 그것을 upvoted) – silviubogan

+1

@silviubogan 디자인에 의한 값의 프로그래밍 방식의 변경에 의해 트리거되어서는 안된다. (동일 자바 스크립트에 적용됨) – JAre

+0

이것이 사실이라면 나는 체크 박스의' 모든 변경 사항을 모니터링하려고하기 때문에 'checked'속성을 사용합니다. – silviubogan

관련 문제