Tôi đang cố gắng sử dụng sự kiện cũng được đính kèm trong React và stopPropagation () của JQuery không dừng lan truyền đến các sự kiện được đính kèm với React.
Có cách nào để làm cho stopPropagation () hoạt động trên các sự kiện này không? Tôi đã viết một JSFiddle đơn giản để thể hiện những hành vi này:
/** @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
người nghe yêu cầu sự kiện sẽ được gọi theo thứ tự mà họ bị ràng buộc. Nếu React JS của bạn được khởi tạo trước jQuery của bạn (như trong fiddle của bạn), việc ngừng lan truyền ngay lập tức sẽ hoạt động.
componentDidMount
, nhưng nó có thể can thiệp vào các trình xử lý sự kiện React khác theo những cách không mong muốn.
.stop-propagation
nhất thiết sẽ không hoạt động. Ví dụ của bạn sử dụng phân quyền sự kiện nhưng đang cố gắng ngừng lan truyền tại phần tử. Người nghe cần được ràng buộc với chính yếu tố : $('.stop-propagation').on('click', function(e) { e.stopPropagation(); });
. Fiddle
event.nativeEvent.stopImmediatePropagation
để ngăn người nghe sự kiện khác bắn, nhưng thứ tự thực hiện không được đảm bảo.