Я так понимаю это хром тупит с первым вариантом.
<input id="lala" type="text" />
<script>
var inp = document.getElementById( 'lala' );
Object.defineProperty( inp, "value", {
configurable: true,
enumerable: true,
set: function( value ) {
alert( "Попытка назначить: " + value );
this.setAttribute( "value", value );
},
get: function() {
return this.getAttribute( "value" );
}
});
inp.value = "test";
alert( inp.value );
</script>