JavaScript实现属性值总和限制与加减交互

作者:拾光

时间:2026-10-24

浏览:226

本文介绍一个基于JavaScript的简单交互功能,模拟角色属性分配场景。通过HTML表单与JS脚本配合,实现username和meili两个数值的加减操作,并严格限制两者之和不超过10。代码包含HTML结构、CSS样式及JS逻辑,展示了基础的表单验证与数值处理技巧。

文章目录

JavaScript实现属性值总和限制与加减交互

这一功能最经典的案例可见于《三国志》或《太阁立志传》系列游戏中,用于为新武将角色分配初始属性点。


笔者使用JavaScript实现了类似的功能,并在页面中同时隐藏了链接的下划线样式。


欢迎读者提出更优化的建议。


以下是具体代码实现。


首先是HTML文件test.html的内容。


具体代码如下所示。

 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script language="JavaScript" src="util.js" type="text/JavaScript"></script>
<link rel="stylesheet" href="link.css" type="text/css">
</HEAD>
<BODY >
<form name="Register1Form" method="POST" >
<table>
<tr>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="font1"><div align="right">username</div></td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="font1"> <div align="center">
<input name="username" type="text" size="10" maxlength="10" value="1">
</div></td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="bg2">
<div align="center"><font color="#FF0000"><font color="#FF0000"><font face="黑体"><a href="" onclick="javascript:add(Register1Form);return false;" class="A">+</a></font></font></font></div& gt;</td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="bg2">
<div align="center"><font color="#FF0000"><font color="#FF0000"><font face="黑体"><a href="" onclick="javascript:subtration(Register1Form);return false;" class="A">-</a></font></font></font></div& gt;</td>
</tr>
<tr>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="font1"><div align="right">meili</div></td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="font1"> <div align="center">
<input name="meili" type="text" size="10" maxlength="10" value="1">
</div></td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="bg2">
<div align="center"><font color="#FF0000"><font color="#FF0000"><font face="黑体"><a href="" onclick="javascript:add2(Register1Form);return false;" class="A">+</a></font></font></font></div& gt;</td>
<td height="30" bordercolor="#FFFFFF" bgcolor="#D0E8FF" class="bg2">
<div align="center"><font color="#FF0000"><font color="#FF0000"><font face="黑体"><a href="" onclick="javascript:subtration2(Register1Form);return false;" class="A">-</a></font></font></font></div& gt;</td>
</tr>
</table>
</form>
</body>
</html>

接下来是CSS文件link.css的内容。


具体代码如下所示。

 
.A {
text-transform: none;
text-decoration: none;
} 
.a:hover {
text-decoration: underline
} 

最后是JavaScript文件util.js,代码较长。


具体代码如下所示。

 
var flag=false;
function add(formname){
if (formname.username.value == "") {
alert("请输入一个正整数");
formname.username.focus();
return false;
} 
flag = checkscope(formname);
if(flag==false){
return false;
} 
if( parseInt(formname.username.value)>0){
formname.username.value =parseInt(formname.username.value)+1;
if(parseInt(formname.username.value)+parseInt(formname.meili.value)>10){
alert("输入的整数之和不得大于10");
formname.username.value =10-parseInt(formname.meili.value);
return false;
}else
return true;
}else{
alert("输入的整数必须大于0");
formname.username.value =1;
return false;
} 
} 
function subtration(formname){
if (formname.username.value == "") {
alert("请输入一个正整数");
formname.username.focus();
return false;
} 
flag = checkscope(formname);
if(flag==false){
return false;
} 
if( parseInt(formname.username.value)>1){
formname.username.value =parseInt(formname.username.value)-1;
if(parseInt(formname.username.value)+parseInt(formname.meili.value)>10){
alert("输入的整数之和不得大于10");
formname.username.value =10-parseInt(formname.meili.value);
return false;
}else
return true;
}else if(parseInt(formname.username.value) ==1){
alert("已经是最小值,不能再减了");
return false;
}else{
alert("输入的整数必须大于1");
formname.username.value =1;
return false;
} 
} 
function add2(formname){
if (formname.meili.value == "") {
alert("请输入一个正整数");
formname.meili.focus();
return false;
} 
flag = checkscope(formname);
if(flag==false){
return false;
} 
if( parseInt(formname.meili.value)>0){
formname.meili.value =parseInt(formname.meili.value)+1;
if(parseInt(formname.username.value)+parseInt(formname.meili.value)>10){
alert("输入的整数之和不得大于10");
formname.meili.value =10-parseInt(formname.username.value);
return false;
}else
return true;
}else{
alert("输入的整数必须大于0");
formname.meili.value=1;
return false;
} 
} 
function subtration2(formname){
if (formname.meili.value == "") {
alert("请输入一个正整数");
formname.meili.focus();
return false;
} 
flag = checkscope(formname);
if(flag==false){
return false;
} 
if( parseInt(formname.meili.value)>1){
formname.meili.value =parseInt(formname.meili.value)-1;
if(parseInt(formname.username.value)+parseInt(formname.meili.value)>10){
alert("输入的整数之和不得大于10");
formname.meili.value =10-parseInt(formname.username.value);
return false;
}else
return true;
}else if(parseInt(formname.meili.value) ==1){
alert("已经是最小值,不能再减了");
return false;
}else{
alert("输入的整数必须大于1");
formname.meili.value=1;
return false;
} 
} 
function checkscope(formname){
if((parseInt(formname.username.value)>9)||(parseInt(formname.username.value)<1)){
alert("username输入数字超出允许的范围1-9");
formname.username.value=1;
formname.username.focus();
return false;
} 
if((parseInt(formname.meili.value)>9)||(parseInt(formname.meili.value)<1)){
alert("meili输入数字超出允许的范围1-9");
formname.meili.value=1;
formname.meili.focus();
return false;
} 
return true;
} 

将这三个文件置于同一文件夹下即可运行测试,效果如作者所述。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章