Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Повесить сеттер на input.value (https://javascript.ru/forum/misc/30240-povesit-setter-na-input-value.html)

devote 28.07.2012 20:20

Цитата:

Сообщение от FINoM
Вот она, рыба:

тоже вариант :) А событие у все такое есть? тоесть у всех браузеров? вижу в опере работает, в хроме тож.. в других не знаю как будет.

devote 28.07.2012 20:22

хотя не, в опере у меня не пашет твой вариант, в 12-й не тестил, у меня щас 11.64... но зато в опере есть дескрипторы сеттер/геттер, тоесть с ней вообще все проще.

FINoM 28.07.2012 20:22

http://help.dottoro.com/ljrmcldi.php ← тут пишут, что работает везде, кроме оперы.

devote 28.07.2012 20:24

для оперы этот вариант канает:

<div id="lala"></div>
<script>
    var div = document.getElementById( 'lala' );
    var descriptor = Object.getOwnPropertyDescriptor( div, 'innerHTML' );
    var oldSetter = descriptor.set;
    descriptor.set = function( value ) {
        alert( "Попытка назначить: " + value );
        oldSetter.apply( this, arguments );
    }
    Object.defineProperty( div, "innerHTML", descriptor );
 
    div.innerHTML = "<b>test</b> <i>italic</i>";

    alert( div.innerHTML );
</script>

FINoM 28.07.2012 20:25

Цитата:

Сообщение от devote
для оперы этот вариант канает:

угу, спс

devote 28.07.2012 20:26

ты просто проверяй присутствие дескриптора сеттер, если есть юзай defineProperty, в противном случае событие что ты показал.. и т.д.

devote 28.07.2012 20:33

FINoM,
а ты видел че пишет w3c? http://www.w3.org/TR/DOM-Level-3-Eve...ubtreeModified

Цитата:

Warning! the DOMSubtreeModified event type is defined in this specification for reference and completeness, but this specification deprecates the use of this event type.

FINoM 28.07.2012 20:36

В жопу W3C :D

devote 28.07.2012 20:37

Цитата:

Сообщение от FINoM
В жопу W3C

:D

oneguy 28.07.2012 20:50

Вот, написал код, работает в IE, Firefox, Opera, но не в Chrome.
<!DOCTYPE html>

<html><head>

<title></title>

</head><body>
<p>asd</p>

<script type="text/javascript">
//основной код
var desc={
  get: function () {
    delete this.innerHTML;
    var res=this.innerHTML;
    Object.defineProperty(this, "innerHTML", desc);
    return res;
  },
  set: function (value) {
    this.oninnerHTML(value);
    delete this.innerHTML;
    this.innerHTML=value;
    Object.defineProperty(this, "innerHTML", desc);
  },
  configurable: true
};
function setInnerHTMLHandler(element) {
  Object.defineProperty(element, "innerHTML", desc);
}
//конец основного кода

var p=document.getElementsByTagName("p")[0];
setInnerHTMLHandler(p);
p.oninnerHTML=function (text) {
  alert(text);
}
p.innerHTML="123";
</script>
</body></html>


Часовой пояс GMT +3, время: 16:46.