У меня есть поле, которое отображает дату, используя следующие компоненты:ReactJS Заменить содержание
import React from 'react';
import Moment from 'moment';
export default class ChaserField extends React.Component {
render() {
return (
<div onClick={this.props.onClick}>
{this.props.chaserDate != '0000-00-00' && this.props.chaserDate ? Moment(this.props.chaserDate).format('DD/MM/YYYY') : '-'}
</div>
);
}
}
Родитель:
import React from 'react';
import Moment from 'moment';
import TrackingSentField from './TrackingSentField';
import ChaserField from './ChaserField';
export default class ShippingTable extends React.Component {
static contextTypes = {}
componentWillMount() {
this.setState({
editingChaser: false,
editingTrackingSent: false
})
}
handleTrackingSentField(e) {
this.setState({
editingTrackingSent: true
})
}
handleChaserField(e) {
this.setState({
editingChaser: true
})
}
render() {
var rowData = this.props.rows.map((row) => {
return (
<tr key={row.id}>
<td>{row.position_ref}</td>
<td>{row.quantity}</td>
<td><a target="_blank" href={'/supplier/'+row.supplierId}>{row.name}</a></td>
<td>{row.warehouse_eta != '0000-00-00' && row.warehouse_eta ? Moment(row.warehouse_eta).format('DD/MM/YYYY') : '-'}</td>
<td>{row.customer_eta != '0000-00-00' && row.customer_eta ? Moment(row.customer_eta).format('DD/MM/YYYY') : '-'}</td>
<td><ChaserField onClick={this.handleChaserField.bind(this)} chaserDate={row.chaserETA}/></td>
<td><TrackingSentField onClick={this.handleTrackingSentField.bind(this)} trackingDate={row.customer_tracking}/></td>
<td><img title={row.img_title} src={row.img}/></td>
</tr>
)
});
return (
<table className="table table-condensed table-hover">
<thead>
<col width="40"/>
<col width="50"/>
<col width="230"/>
<col width="80"/>
<col width="80"/>
<col width="80"/>
<col width="80"/>
<col width="53"/>
<tr>
<th></th>
<th>QTY</th>
<th>Supplier</th>
<th>WETA</th>
<th>CETA</th>
<th>Chase</th>
<th>Track' sent</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<col width="40"/>
<col width="50"/>
<col width="230"/>
<col width="80"/>
<col width="80"/>
<col width="80"/>
<col width="80"/>
<col width="53"/>
{rowData}
</tbody>
</table>
)
}
}
То, что я хочу, чтобы это произошло, когда я нажмите на DIV, это содержимое, которое необходимо изменить в поле ввода даты, и когда пользователь завершит изменение даты его сохранения, когда он щелкнет его или нажмите Enter.
Как это можно сделать?
Удаляет ли запуск триггера события onBlur? – imperium2335
Нет, я не думаю, что это так. Для этого вам нужно будет проверить код ключа, который является частью события нажатия клавиши. Кроме того, вы можете обернуть свой ввод в форму и использовать форму onSubmit callback, которая, вероятно, будет активирована нажатием клавиши enter. Возможно, подход с ключевым кодом события будет более надежным. –
Выполнение этого было бы намного проще, чем прилипание ровного слушателя в окне? то есть window.addEventListener ('mousedown', this.props.pageClick.bind (this), false); – imperium2335