我只是一个使用javascript的初学者,我很难解决这个问题。我想根据名字和姓氏的第一个字符生成一个控制号。自动生成序列号和今年的后两位数字。
样品对照号:JS0001-18
JS =杰森·史密斯(条目名称)//姓氏和姓氏的第一个字符
0001 =序列号。
18 =今年的后两位数字。
此代码必须在我输入学生的名字之后自动出现...
非常感谢您,希望您能帮助我解决这个问题。
<script type="text/javascript">
function getstudentNumber() {
var lastnameFirstChar = $('#lastname').val().substr(0, 1);
var firstnameFirstChar = $('#firstname').val().substr(0, 1);
var studentID.value = lastname.value;
var studentNumber = getSequence();
document.getElementById("student_no").value = studentNumber;
document.getElementById("student_no").focus();
return true;
}
function getSequence(count, content) {
var result = [];
if (typeof content == "function") {
for (var i = 0; i < count; i++) {
result.push(content(i));
}
} else {
for (var i = 0; i < count; i++) {
result.push(content);
}
}
return result;
}
function getYearNumber() {
var d = new Date();
var n = d.getFullYear().val().charAt(0);
document.getElementById("demo").innerHTML = n;
}
</script>
这是HTML代码
<div class="form-group">
<label>Student Number</label>
<input autofocus="" id="student_no" name="student_no" type="text" class="form-control" value="" onblur="getstudentNumber()"
/>
</div>
<div class="form-group">
<label>Last Name</label>
<input id="lastname" name="lastname" placeholder="" type="text" class="form-control" value="" />
</div>
<div class="form-group">
<label>First Name</label>
<input id="firstname" name="firstname" placeholder="" type="text" class="form-control" value="" />
</div>
答案 0 :(得分:0)
注意该答案假定元素“ student_no”用于 output ,并且JS应该使用全局变量来跟踪学生人数。
正如您所说,学生编号由三个块组成。名称,编号和年份。我们可以为每个函数创建一个函数。
function getInitials(firstName, lastName) {
return (firstName[0] + lastName[0]).toUpperCase()
}
请注意,[0]
与.substr(0, 1)
相同。方括号的使用只会允许使用单个字符-但这就是我们在这种情况下需要的全部内容。
我们添加.toUpperCase()
以确保即使您输入小写字母名称,您仍然可以得到大写字母的缩写。
接下来,您的getYearNumber
函数看起来有点破损。让我们从头开始写一个。它需要:
现在,我们可以立即将年份提取为两位数代码。但是,此方法已被弃用,因此我们需要自己做。
function getYear() {
var now = new Date()
var fullYear = now.getFullYear()
var shortYear = fullYear % 100
}
% 100
会在您除以100时找到余数。2018
(写作年份)除以100会得到20余数 18 。完善!通过不将中间值存储在变量中,可以使函数更短。
function getYear() {
return (new Date).getFullYear() % 100
}
注意:存在一个可怕的“ 2000年”问题。不过这对再千年都没关系;)
您对.val().charAt(0)
的理论不太正确的原因是数字没有.val()
,并且如果您想将其转换为字符串,.charAt(0)
仅会给您第一个字符(在2
中为2018
)。希望有帮助吗?
我们现在可以创建一个接受Number
的函数(例如72);并创建带有填充零的字符串(例如0072
)
function paddedNumber(number) {
var numberAsString = number.toString()
var numberLength = numberAsString.length
var numberLengthRemaining = 4 - numberLength
var zeros = "0".repeat(numberLengthRemaining)
return zeros + numberAsString
}
我们可以简化很多。
function paddedNumber(number) {
return "0".repeat(4 - number.toString().length) + number
}
String + Number
将始终为String
。
有一个问题。某些浏览器不支持现代的.repeat()
。因此,我们将其替换为for循环。
function paddedNumber(number) {
var result = ""
for(var i = 4 - number.toString().length; i > 0; i--) {
result += "0"
}
return result + number
}
很棒!
现在,我们将其与一个大功能整合在一起。
function makeStudentID(firstName, lastName, studentNumber) {
return getInitials(firstName, lastName) + paddedNumber(studentNumber) + getYear()
}
最后,我们需要收集数据!
var sequenceNumber = 1
function gatherDataAndOutput() {
var firstName = document.getElementById("firstname").value
var lastName = document.getElementById("lastname").value
var outputElement = document.getElementById("student_no")
outputElement.value = makeStudentID(firstName, lastName, sequenceNumber)
sequenceNumber++; // make a different ID for the next student.
}
JS代码看起来像这样(希望这将指向正确的方向)。
function getInitials(firstName, lastName) {
return (firstName[0] + lastName[0]).toUpperCase()
}
function getYear() {
return (new Date).getFullYear() % 100
}
function paddedNumber(number) {
var result = ""
for(var i = 4 - number.toString().length; i > 0; i--) {
result += "0"
}
return result + number
}
function makeStudentID(firstName, lastName, studentNumber) {
return getInitials(firstName, lastName) + paddedNumber(studentNumber) + getYear()
}
var sequenceNumber = 1
function gatherDataAndOutput() {
var firstName = document.getElementById("firstname").value
var lastName = document.getElementById("lastname").value
var outputElement = document.getElementById("student_no")
outputElement.value = makeStudentID(firstName, lastName, sequenceNumber)
sequenceNumber++; // make a different ID for the next student.
}
我重新排序了HTML,添加了重命名的函数,并禁用了我们的输出输入,以便您不能键入它,只能从中查看和复制。这些只是样式更改(除了重命名功能之外)。请注意,当第二个输入模糊时-仅第一个输入模糊时,输出仅会更改。添加一个按钮可能会有所帮助,因为此刻,每当您模糊第二个输入时,ID都会更改,即使这是偶然的。
<div class="form-group">
<label>Last Name</label>
<input id="lastname" name="lastname" placeholder="" type="text" class="form-control" />
</div>
<div class="form-group">
<label>First Name</label>
<input id="firstname" name="firstname" placeholder="" type="text" class="form-control" onblur="gatherDataAndOutput()"/>
</div>
<div class="form-group">
<label>Student Number</label>
<input autofocus="" id="student_no" name="student_no" type="text" class="form-control" disabled onblur="gatherDataAndOutput()"
/>
</div>