eliminar - setattribute javascript
Webkit Mutation La devolución de llamada del observador no se activa cuando se selecciona el cambio del atributo de cuadro (1)
@gryzzly, actualicé el error de Chromium con una respuesta detallada: http://code.google.com/p/chromium/issues/detail?id=128991#c4
Los observadores de mutaciones están limitados a observar el estado serializado del DOM. Si desea saber si los observadores de mutaciones pueden observar algo, simplemente eche un vistazo a lo que innerHTML produce para el elemento. Si puede ver el cambio en el estado reflejado en los cambios en el marcado que produce, entonces los Observadores de Mutación deberían poder escuchar al respecto.
TL; DR: esto funciona según lo previsto; para observar los cambios en los atributos de IDL como HTMLSelectElement.value, los eventos de entrada como onclick o onchange son probablemente la mejor opción.
Estoy intentando supervisar los cambios para seleccionar el cuadro (o elementos de option
anidados) con la nueva funcionalidad de Mutation Observer . Sin embargo, solo "setAttribute" está activando la devolución de llamada del observador de mutación para mí.
Aquí está el código que estoy usando:
~function(doc, $) {
var select = $(''select'');
// http://www.w3.org/TR/dom/#mutation-observers
var observer = new WebKitMutationObserver(function(mutations) {
alert(mutations.length + " mutations happened");
});
observer.observe(select, {
// monitor descendant elements – changing `selected` attr on options
subtree: true,
attributes: true
});
// this triggers Observer''s reaction, but doesn''t update select box UI
select.setAttribute(''value'', ''whee'');
// this updates select box UI, but doesn''t trigger mutation observer''s callback
select.value = "whee";
// this also updates the UI, but doesn''t trigger mutation observer''s callback
select.getElementsByTagName(''option'')[0].selected = true;
//
// neither does manual selecting of options trigger mutation observer unfortunately :(
button.addEventListener(''click'', function(e) {
e.preventDefault();
// my goal is to react to this change here
select.value = Math.random() > .5 ? "whee" : "whoa";
}, false);
}(document, function(selector) { return document.querySelector(selector); });
Y aquí está este código en acción http://jsfiddle.net/gryzzly/wqHn5/
Me gustaría reaccionar a los cambios en los atributos ( selected
en <option>
o value
en <select>
), cualquier sugerencia sobre por qué el observador no reacciona es más que bienvenido.
Estoy probando esto en Chrome 18.0.1025.168 en Mac OS X. Por supuesto, el código de producción también tiene un prefijo moz para el constructor y una versión no prefijada, esto es código de prueba.
UPD.
Probó el código en Firefox Nightly también y se comporta de la misma manera que en Chrome, así como en Chrome Canary. He llenado el error para ambos navegadores:
- https://bugzilla.mozilla.org/show_bug.cgi?id=757077
- https://code.google.com/p/chromium/issues/detail?id=128991
Comenta y vota por estos errores si también encuentras este problema molesto.