<body>
<input type="button" id="test_value" data-id="off" value="Click Me">
<script>
window.onload = function(){
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observer = new MutationObserver(function(mutations){
mutations.forEach(function(mutation){
console.dir(mutation)
alert(mutation.attributeName + ' Value: ' + target.getAttribute(mutation.attributeName));
});
});
var target = document.getElementById('test_value');
observer.observe(target, {attributes: true});
target.addEventListener('click', function(){
this.dataset.id = 'on';
});
}
</script>
</body>
вариант использования Observer, думаю, что еще через гетеры сеттеры можно реализовать