gpt4 book ai didi

javascript - 焦点输入在 knockout 中动态添加到 observableArray

转载 作者:行者123 更新时间:2023-12-02 04:58:12 24 4
gpt4 key购买 nike

在 KO 3.0.0.beta 中(我几乎可以肯定它在 2.3 中是一样的)我正在尝试向动态创建的表中添加新行:

HTML

<div id="root">
<table>
<tbody data-bind="foreach: events">
<tr>
<td>
<input type="text" data-type="name" data-bind="value: name, css: {hidden: !editing()}, hasFocus: true">
</td>
<td>
<input type="text" data-type="method" data-bind="value: age, css: {hidden: !editing()}">
</td>
</tr>
</tbody>
</table>
</div>

JavaScript

var $root = $('#root');

$root.on('blur', 'table input', function(event) {
var data = ko.dataFor(event.target),
context = ko.contextFor(event.target),
$input = $(event.target),
newData;

data.editing(false);

if($input.closest('td').is(':last-child') && $input.closest('tr').is(':last-child')) {
newData = {
name: '',
age: '',
editing: ko.observable(false)
};

context.$root.events.push(newData);
newData.editing(true);
}
});

var data = {
events: [
{name: 'aaa', age: '22', editing: false},
{name: 'bbb', age: '33', editing: false},
{name: 'ccc', age: '44', editing: false}
]
};

var mapping = {
events: {
key: function(data) {
return ko.unwrap(data.name);
}
}
};

var observable = ko.mapping.fromJS(data, mapping);

ko.applyBindings(observable, $root[0]);

JSFiddle

几乎有效。

我成功地创建了行 - 这是简单的部分,但就我的生活而言,我无法将创建的原始数据中的第一个输入集中起来。

有什么想法吗(我听取了很多建议,但没有一个在上述设置中起作用)?

最佳答案

我可能没有捕获要点,但为什么不直接将 hasFocus 设置为 editing() 而不是 true 呢?

<div id="root">
<table>
<tbody data-bind="foreach: events">
<tr>
<td>
<input type="text" data-type="name" data-bind="value: name, css: {hidden: !editing()}, hasFocus: editing()">
</td>
<td>
<input type="text" data-type="method" data-bind="value: age, css: {hidden: !editing()}">
</td>
</tr>
</tbody>
</table>
</div>

fiddle here

关于javascript - 焦点输入在 knockout 中动态添加到 observableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19534995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com