gpt4 book ai didi

javascript - DOM更新时如何维护jquery inputmask?

转载 作者:行者123 更新时间:2023-12-02 16:07:12 25 4
gpt4 key购买 nike

很难描述。这是一个片段。

(function() {
var PhoneNumber = function() {
this.name = ko.observable();
this.phone = ko.observable();
};

$('[data-mask="phone"]').inputmask({
mask: '(999)999-9999'
});



var vm = {
newNumber: ko.observable(new PhoneNumber()),
numbers: ko.observableArray([]),
};

console.log('vm', vm.numbers());


vm.numbersJson = ko.computed(function() {
return ko.toJSON(vm.numbers);
});
vm.newNumberJson = ko.computed(function() {
return ko.toJSON(vm.newNumber);
});

ko.applyBindings(vm);


//events
function addNewNumber() {
vm.numbers.push(vm.newNumber());
vm.newNumber(new PhoneNumber());
}

function removeNumber() {
var item = ko.dataFor(this);
var remVal = _.reject(vm.Numbers(), function(el) {
return el.name === item.name;
});
vm.Numbers(remVal);
};

$(document).on('click', '#btnAdd', addNewNumber);
$(document).on('click', '.btnRemove', removeNumber);
})();
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" />
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://rawgit.com/RobinHerbots/jquery.inputmask/3.x/dist/jquery.inputmask.bundle.js"></script>
<table class="table table-condensed table-hover table-striped table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Phone</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach:numbers">
<tr>
<td><span data-bind="text:name"></span>
</td>
<td><span data-bind="text:phone"></span>
</td>
<td class="form-group">
<button class="btn btn-sm btnRemove btn-default" type="button"> <i class="fa fa-trash"></i>

</button>
</td>
</tr>
</tbody>
<tfoot data-bind="with:newNumber">
<tr>
<td>
<input type="text" class="input-sm form-control" data-bind="textInput:name" />
</td>
<td>
<input type="text" class="input-sm form-control" data-mask="phone" data-bind="textInput:phone" />
</td>
<td>
<button class="btn btn-sm btn-default" id="btnAdd" type="button"><i class="fa fa-plus"></i>
</button>
</td>
</tr>
</tfoot>
</table>
<h2>Values</h2>
<p>Numbers: <span data-bind="text:numbersJson"></span>
</p>
<p>New Number:
<span data-bind="text:newNumberJson"></span>
</p>

请注意,当 DOM 准备好时,电话输入掩码就位。当我们在“电话”文本框中键入时,输入掩码有效。

但是在将第一条记录添加到数组中并且清除文本框后,输入掩码会丢失。

问题:如何将输入掩码保留在文本框上?

最佳答案

最简单的方法是将掩码设置代码放入 addNewNumber 例程中。

function setMask() {
$('[data-mask="phone"]').inputmask({
mask: '(999)999-9999'
});
}

vm.addNewNumber = function () {
vm.numbers.push(vm.newNumber());
vm.newNumber(new PhoneNumber());
setTimeout(setMask, 0);
};

我做了a Fiddle 。使用自定义绑定(bind)可能会更好,但是,正如我所说,这是最简单的。

现在我已经在 another Fiddle 中创建了一个自定义绑定(bind)处理程序。它节省了搜索要屏蔽的元素的时间,因为它知道它所在的元素。

ko.bindingHandlers.phoneTextInput = {
init: function (element, valueAccessor, allBindings, data, context) {
ko.bindingHandlers.textInput.init(element, valueAccessor, allBindings, data, context);

$(element).inputmask({
mask: '(999)999-9999'
});
}
}

关于javascript - DOM更新时如何维护jquery inputmask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30605660/

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