对于这样的事情,图书馆可能会很好。我个人推荐 Knockout,但每个人都有自己的喜好。这就是我会做的(不一定是你最好的方式)。
您的 HTML 几乎相同,只是添加了一个模板。主要区别在于data-bind
属性,它告诉元素要显示什么数据。关键是在valueUpdate
之后更新变量keydown
,而不是blur
(在 的对面focus
)。
<div>
<label for="EmployeeName">Full name:</label>
<input id="EmployeeName" type="text" maxlength="30" size="20"
data-bind="value: EmployeeName, valueUpdate: 'afterkeydown'" />
<label for="XYZ">A Label:</label>
<input id="XYZ" type="text" maxlength="30" size="20"
data-bind="value: XYZ, valueUpdate: 'afterkeydown'" />
</div>
<textarea disabled rows=20 data-bind="value: Email"></textarea>
<script type="text/html" id="signatureTemplate">
<h2>EmployeeName</h2>
<h2>XYZ</h2>
<h3>Company</h3>
<h3>My Position</h3>
</script>
这些data-bind
值与您的 JavaScript 相匹配,并且每次用户键入字符时都会更新。您可以在他们的网站上学习 Knockout ,或者根据需要修改此代码。
var SignatureGenerator = function(){
var self = this;
self.EmployeeName = ko.observable('');
self.XYZ = ko.observable('');
self.Email = ko.computed(function(){
return document.getElementById("signatureTemplate").innerHTML
.replace("EmployeeName", self.EmployeeName());
.replace("XYZ", self.XYZ());
});
}
ko.applyBindings(window.app = new SignatureGenerator());