Estoy tratando de usar event.stopPropagation () dentro de un componente ReactJS para evitar que un evento click aumente y active un evento click que se adjuntó con JQuery en el código heredado, pero parece que stopPropagation () de React solo detiene la propagación a eventos también adjunto en React, y stopPropagation () de JQuery no detiene la propagación a eventos adjuntos con React.
¿Hay alguna manera de hacer que stopPropagation () funcione en estos eventos? Escribí un JSFiddle simple para demostrar estos comportamientos:
/** @jsx React.DOM */
var Propagation = React.createClass({
alert: function(){
alert('React Alert');
},
stopPropagation: function(e){
e.stopPropagation();
},
render: function(){
return (
<div>
<div onClick={this.alert}>
<a href="#" onClick={this.stopPropagation}>React Stop Propagation on React Event</a>
</div>
<div className="alert">
<a href="#" onClick={this.stopPropagation}>React Stop Propagation on JQuery Event</a>
</div>
<div onClick={this.alert}>
<a href="#" className="stop-propagation">JQuery Stop Propagation on React Event</a>
</div>
<div className="alert">
<a href="#" className="stop-propagation">JQuery Stop Propagation on JQuery Event</a>
</div>
</div>
);
}
});
React.renderComponent(<Propagation />, document.body);
$(function(){
$(document).on('click', '.alert', function(e){
alert('Jquery Alert');
});
$(document).on('click', '.stop-propagation', function(e){
e.stopPropagation();
});
});
stopImmediatePropagation
oyentes de eventos de reclamos serán llamados en el orden en que fueron vinculados. Si su React JS se inicializa antes de su jQuery (como está en su violín), la detención de la propagación inmediata funcionará.
componentDidMount
, pero podría interferir con otros controladores de eventos React de maneras inesperadas.
.stop-propagation
necesariamente funcionará. Su ejemplo utiliza la delegación de eventos pero está intentando detener la propagación en el elemento. El oyente tiene que ser unido al elemento en sí: $('.stop-propagation').on('click', function(e) { e.stopPropagation(); });
. Este violín evita toda propagación como lo estaba intentando: jsfiddle.net/7LEDT/6
event.nativeEvent.stopImmediatePropagation
para evitar que se activen otros escuchas de eventos, pero no se garantiza el orden de ejecución.