解决此js问题100分只给你一个人~

Epiphone 2011-07-12 03:59:39

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');</script>

</HEAD>

<BODY>
<li>1.用户输入的值必须小于后面红色部分</li>
<li>2.如果CO要从20变成100,那么是从CO的下级或下级的下级里扣除,比如当CO变成100 则首先从SH扣除15 然后从SA1扣除10,SA2扣除15,SA3扣除20,SA4扣除20</li>
<li>3.如果CO从20变成0,那么CO的下级会从15变成35,就是说除了最后一级SA4,其余的如果上级增加就从下级扣除直到满足条件,如果上级减少则减少的部分会加给下级</li>
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>
<li>5.如果把CO SH SA1 都设为0 那么SA2会变成60 这时需要提示出错 并且把CO SH SA1 SA2还原成初始化的状态</li>
<br/><br/>
<tr align="left" height="15" valign="middle">
<th width="10%">
<span style="color: red;">*</span>实际风险(%)</th>
<td colspan="6" class="table01" bgcolor="#ffffff">
<div id="etd2">
CO<input size="5" onblur="check(0)" name="actualRiskVal" id="actualRiskVal0" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk0" style="color: red;">100</span><span style="color: red;">%</span>    
SH<input size="5" onblur="check(1)" name="actualRiskVal" id="actualRiskVal1" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk1" style="color: red;">80</span><span style="color: red;">%</span>    
SA1<input size="5" onblur="check(2)" name="actualRiskVal" id="actualRiskVal2" oldvalue="10" value="10" type="text">
<span style="color: red;">/</span><span id="maxRisk2" style="color: red;">65</span><span style="color: red;">%</span>    
SA2<input size="5" onblur="check(3)" name="actualRiskVal" id="actualRiskVal3" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk3" style="color: red;">55</span><span style="color: red;">%</span>    
SA3<input size="5" onblur="check(4)" name="actualRiskVal" id="actualRiskVal4" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk4" style="color: red;">40</span><span style="color: red;">%</span>    <br>
SA4<input size="5" onblur="check(5)" name="actualRiskVal" id="actualRiskVal5" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk5" style="color: red;">20</span><span style="color: red;">%</span>    </div>
<div id="etd"></div>

</td>
</tr>
</BODY>
<script type="text/javascript">
function check(id){
var oldVal = $("#actualRiskVal"+id).attr("oldValue");
var risk = $("#actualRiskVal"+id).val();
//console.log(oldVal);
var reg=/^[0-9]+$/;
if(!reg.test(risk))
{
alert("请输入数字");
$("#actualRiskVal"+id).val(oldVal);
}else{
var maxRisk = $("#maxRisk"+id).html();
//console.log("maxRisk"+maxRisk);

if(parseInt(risk)>parseInt(maxRisk)){
alert("必须小于最大值"+maxRisk);
$("#actualRiskVal"+id).val(oldVal);
}

}

}
</script>
</HTML>

...全文
403 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
X技术交流X 2014-01-09
  • 打赏
  • 举报
回复
shine333 大牛. 学习了.
Epiphone 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 stl0 的回复:]

HTML code
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>


我有个问题,如果把SA3 由25变成15,这种情况下s4已经是20%最大值,减少的部分应该加到哪里?
[/Quote]
加给他的上级 如果还是超过最大值 继续加给他上级的上级 依次类推
Epiphone 2011-07-13
  • 打赏
  • 举报
回复
嗯 其实减少的时候也可以 只是感觉那样比较麻烦 要判断变化后的值 是否超过了最大值
SH 20 /100 SA1 30 /40 SA2 10 /20 SA3 10 /30
如果把SA1变成0 那么 SA2则是40 但是他的最大值是20 那么SA2 多出来的20 就继续加给SA3 如果加给SA3后依旧 超过了最大值 那么依次往下加

stl0 2011-07-13
  • 打赏
  • 举报
回复
还有,oldvalue是一个固定值,这样的话,onblur事件触发后,oldvalue不改变也是个问题。。 是不是有必要再加一个onfocus事件,用来取得改变之前的值
小绵羊 2011-07-13
  • 打赏
  • 举报
回复
stl0 2011-07-13
  • 打赏
  • 举报
回复
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>


我有个问题,如果把SA3 由25变成15,这种情况下s4已经是20%最大值,减少的部分应该加到哪里?
shine333 2011-07-13
  • 打赏
  • 举报
回复
有一点没搞明白,lz解释一下。
增加的时候,效果是传递到下级、下级的下级...
减少的时候,效果只影响下级?
shine333 2011-07-13
  • 打赏
  • 举报
回复
once again coding, be patient please.
Epiphone 2011-07-13
  • 打赏
  • 举报
回复
现在就差 满足条件4 和条件5 了
shine333 2011-07-13
  • 打赏
  • 举报
回复
貌似
if (myVal > this.limit) {
alert("出了问题!");
for (var i = 0; i <= 5; i++) { //用于满足第5条的条件
你的修改有问题。
myVal只是一个temp,只要后续能够用,还是能让他链式反应下去的
zousifang661236 2011-07-13
  • 打赏
  • 举报
回复
5楼楼主写的算法很好, 但是不能符合第5条的条件, 我在上面做了一些补丁.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');</script>

</HEAD>

<BODY>
<li>1.用户输入的值必须小于后面红色部分</li>
<li>2.如果CO要从20变成100,那么是从CO的下级或下级的下级里扣除,比如当CO变成100 则首先从SH扣除15 然后从SA1扣除10,SA2扣除15,SA3扣除20,SA4扣除20</li>
<li>3.如果CO从20变成0,那么CO的下级会从15变成35,就是说除了最后一级SA4,其余的如果上级增加就从下级扣除直到满足条件,如果上级减少则减少的部分会加给下级</li>
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>
<li>5.如果把CO SH SA1 都设为0 那么SA2会变成60 这时需要提示出错 并且把CO SH SA1 SA2还原成初始化的状态</li>
<br/><br/>
<tr align="left" height="15" valign="middle">
<th width="10%">
<span style="color: red;">*</span>实际风险(%)</th>
<td colspan="6" class="table01" bgcolor="#ffffff">
<div id="etd2">
CO<input size="5" onblur="check(0)" name="actualRiskVal" id="actualRiskVal0" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk0" style="color: red;">100</span><span style="color: red;">%</span>    
SH<input size="5" onblur="check(1)" name="actualRiskVal" id="actualRiskVal1" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk1" style="color: red;">80</span><span style="color: red;">%</span>    
SA1<input size="5" onblur="check(2)" name="actualRiskVal" id="actualRiskVal2" oldvalue="10" value="10" type="text">
<span style="color: red;">/</span><span id="maxRisk2" style="color: red;">65</span><span style="color: red;">%</span>    
SA2<input size="5" onblur="check(3)" name="actualRiskVal" id="actualRiskVal3" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk3" style="color: red;">55</span><span style="color: red;">%</span>    
SA3<input size="5" onblur="check(4)" name="actualRiskVal" id="actualRiskVal4" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk4" style="color: red;">40</span><span style="color: red;">%</span>    <br>
SA4<input size="5" onblur="check(5)" name="actualRiskVal" id="actualRiskVal5" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk5" style="color: red;">20</span><span style="color: red;">%</span>    </div>
<div id="etd"></div>

</td>
</tr>
</BODY>
<script type="text/javascript">
function check(id){
var myData = data[id];
myData.setValue(myData.getValue());
}
var data = [];
for (var i = 0; i <= 5; i++) {
data[i] = {
id: i,
field: $("#actualRiskVal" + i),
limit: parseInt($("#maxRisk" + i).html()),
originalValue: $("#actualRiskVal" + i).attr("oldvalue"), //添加了一个原始值, 用于还原成初始化的状态的时候使用
oldValue: $("#actualRiskVal" + i).val(),//记录前一个值

getValue: function() {
return this.field.val();
},
setValue: function(v) {
var reg=/^[0-9]+$/;
if(!reg.test(v)) {
alert("请输入数字");
this.field.val(this.oldValue);
return;
}
if (v > this.limit) {
alert("必须小于最大值"+this.limit);
this.field.val(this.oldValue);
return;
}
this.field.val(v);
diff = v - this.oldValue;
this.oldValue = v;
if (this.next) {
this.next.adjust(-diff);
}
},
adjust: function(diff) {
if (diff == 0) {
return;
}
var myVal = parseInt(this.getValue()) + diff;
if (myVal < 0) {
myVal = Math.max(0, Math.min(myVal, this.limit));
}
if (myVal > this.limit) {
alert("出了问题!");
for (var i = 0; i <= 5; i++) { //用于满足第5条的条件
data[i].field.val(data[i].originalValue);
data[i].oldValue = data[i].originalValue;

}
return;
}

var myDiff = myVal - parseInt(this.oldValue) - diff;
this.field.val(myVal);
this.oldValue = myVal;
if (this.next) {
this.next.adjust(-myDiff);
}
}
};
if (i > 0) {
data[i - 1].next = data[i];
data[i].prev = data[i - 1];
}
}
</script>

</HTML>
shine333 2011-07-13
  • 打赏
  • 举报
回复
和Java的编程思想一样,平时写Java代码的时候,多看看JDK或者其他开源框架,看看里面的那些类互相之间是如何协调工作,各司其职的,就可以了
Epiphone 2011-07-13
  • 打赏
  • 举报
回复
果然是大牛哇 羡慕 膜拜下

用js 面相对象的那种做法 俺一直没那种思想 shine333 推荐下 怎么样才能写出你那样的 面相对象的js 吧 等你回复了 俺就结贴了
shine333 2011-07-13
  • 打赏
  • 举报
回复
忘记说了,我加了一个form,加了一个resetData函数

如果你需要恢复页面初始值的话,可以调用form的reset()并执行这个函数就可以了
AslenG 2011-07-13
  • 打赏
  • 举报
回复
shine333很负责任的男银啊!感动ing~
shine333 2011-07-13
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');</script>

</HEAD>

<BODY>
<form id="myForm" action="">
<li>1.用户输入的值必须小于后面红色部分</li>
<li>2.如果CO要从20变成100,那么是从CO的下级或下级的下级里扣除,比如当CO变成100 则首先从SH扣除15 然后从SA1扣除10,SA2扣除15,SA3扣除20,SA4扣除20</li>
<li>3.如果CO从20变成0,那么CO的下级会从15变成35,就是说除了最后一级SA4,其余的如果上级增加就从下级扣除直到满足条件,如果上级减少则减少的部分会加给下级</li>
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>
<li>5.如果把CO SH SA1 都设为0 那么SA2会变成60 这时需要提示出错 并且把CO SH SA1 SA2还原成初始化的状态</li>
<br/><br/>
<tr align="left" height="15" valign="middle">
<th width="10%">
<span style="color: red;">*</span>实际风险(%)</th>
<td colspan="6" class="table01" bgcolor="#ffffff">
<div id="etd2">
CO<input size="5" onblur="check(0)" name="actualRiskVal" id="actualRiskVal0" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk0" style="color: red;">100</span><span style="color: red;">%</span>    
SH<input size="5" onblur="check(1)" name="actualRiskVal" id="actualRiskVal1" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk1" style="color: red;">80</span><span style="color: red;">%</span>    
SA1<input size="5" onblur="check(2)" name="actualRiskVal" id="actualRiskVal2" oldvalue="10" value="10" type="text">
<span style="color: red;">/</span><span id="maxRisk2" style="color: red;">65</span><span style="color: red;">%</span>    
SA2<input size="5" onblur="check(3)" name="actualRiskVal" id="actualRiskVal3" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk3" style="color: red;">55</span><span style="color: red;">%</span>    
SA3<input size="5" onblur="check(4)" name="actualRiskVal" id="actualRiskVal4" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk4" style="color: red;">40</span><span style="color: red;">%</span>    <br>
SA4<input size="5" onblur="check(5)" name="actualRiskVal" id="actualRiskVal5" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk5" style="color: red;">20</span><span style="color: red;">%</span>    </div>
<div id="etd"></div>

</td>
</tr>
</form>
</BODY>
<script type="text/javascript">
function check(id){
var myData = data[id];
myData.setValue(myData.getValue());
}
var data = [];
function resetData() {
for (var i = 0; i <= 5; i++) {
data[i] = {
id: i,
field: $("#actualRiskVal" + i),
limit: parseInt($("#maxRisk" + i).html()),
getValue: function() {
return this.field.val();
},
setValue: function(v) {
var reg=/^[0-9]+$/;
if(!reg.test(v)) {
alert("请输入数字");
this.field.val(this.oldValue);
return;
}
if (v > this.limit) {
alert("必须小于最大值"+this.limit);
this.field.val(this.oldValue);
return;
}
this.field.val(v);
diff = v - this.oldValue;
this.oldValue = v;
if (this.next) {
this.next.adjust(-diff);
} else {
this.prev.adjust(-diff, true);
}
},
oldValue: $("#actualRiskVal" + i).val(),
adjust: function(diff, prev) {
if (diff == 0) {
return;
}
var myVal = parseInt(this.getValue()) + diff;
if (myVal < 0 || myVal > this.limit) {
myVal = Math.max(0, Math.min(myVal, this.limit));
}
var myDiff = myVal - parseInt(this.oldValue) - diff;
this.field.val(myVal);
this.oldValue = myVal;
if (prev && this.prev) {
this.prev.adjust(-myDiff, true);
} else if (!prev && this.next) {
this.next.adjust(-myDiff)
}
}
};
if (i > 0) {
data[i - 1].next = data[i];
data[i].prev = data[i - 1];
}
}
}
resetData();
</script>
</HTML>

如果减少也可以传递的话(也就是5不成立),早上的代码,4已经加上。
metsys 2011-07-12
  • 打赏
  • 举报
回复
用三个数组,比大小.
haixiang710 2011-07-12
  • 打赏
  • 举报
回复
总体来说确实比较容易的,只是太繁琐了.
LZ既然是用JQuery,可以考虑下用jquery的表单
验证框架- Jquery formValidator
zhujiazhi 2011-07-12
  • 打赏
  • 举报
回复
看看jquery的验证

jquery.validate.js
例子:
$("#registerForm").validate({
rules: {
registerUserName: "required",
registerPassword: "required",
registerConfirmPassword: {
required: true,
equalTo: "#registerPassword"
},
registerEmail: {
required: true,
email: true
}
},
messages: {
registerUserName: "Please enter your user name",
registerPassword: "Please enter your password",
registerConfirmPassword: {
required: "Please provide a password",
equalTo: "Please enter the same password as above"
},
registerEmail: "Please enter a valid email address",
}
});
shine333 2011-07-12
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');</script>

</HEAD>

<BODY>
<li>1.用户输入的值必须小于后面红色部分</li>
<li>2.如果CO要从20变成100,那么是从CO的下级或下级的下级里扣除,比如当CO变成100 则首先从SH扣除15 然后从SA1扣除10,SA2扣除15,SA3扣除20,SA4扣除20</li>
<li>3.如果CO从20变成0,那么CO的下级会从15变成35,就是说除了最后一级SA4,其余的如果上级增加就从下级扣除直到满足条件,如果上级减少则减少的部分会加给下级</li>
<li>4.如果把最后一级减少,那么减少的部分会添加到他的上一级,比如把SA4变成0那么SA4的上级SA3则是40</li>
<li>5.如果把CO SH SA1 都设为0 那么SA2会变成60 这时需要提示出错 并且把CO SH SA1 SA2还原成初始化的状态</li>
<br/><br/>
<tr align="left" height="15" valign="middle">
<th width="10%">
<span style="color: red;">*</span>实际风险(%)</th>
<td colspan="6" class="table01" bgcolor="#ffffff">
<div id="etd2">
CO<input size="5" onblur="check(0)" name="actualRiskVal" id="actualRiskVal0" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk0" style="color: red;">100</span><span style="color: red;">%</span>    
SH<input size="5" onblur="check(1)" name="actualRiskVal" id="actualRiskVal1" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk1" style="color: red;">80</span><span style="color: red;">%</span>    
SA1<input size="5" onblur="check(2)" name="actualRiskVal" id="actualRiskVal2" oldvalue="10" value="10" type="text">
<span style="color: red;">/</span><span id="maxRisk2" style="color: red;">65</span><span style="color: red;">%</span>    
SA2<input size="5" onblur="check(3)" name="actualRiskVal" id="actualRiskVal3" oldvalue="15" value="15" type="text">
<span style="color: red;">/</span><span id="maxRisk3" style="color: red;">55</span><span style="color: red;">%</span>    
SA3<input size="5" onblur="check(4)" name="actualRiskVal" id="actualRiskVal4" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk4" style="color: red;">40</span><span style="color: red;">%</span>    <br>
SA4<input size="5" onblur="check(5)" name="actualRiskVal" id="actualRiskVal5" oldvalue="20" value="20" type="text">
<span style="color: red;">/</span><span id="maxRisk5" style="color: red;">20</span><span style="color: red;">%</span>    </div>
<div id="etd"></div>

</td>
</tr>
</BODY>
<script type="text/javascript">
function check(id){
var myData = data[id];
myData.setValue(myData.getValue());
}
var data = [];
for (var i = 0; i <= 5; i++) {
data[i] = {
id: i,
field: $("#actualRiskVal" + i),
limit: parseInt($("#maxRisk" + i).html()),
getValue: function() {
return this.field.val();
},
setValue: function(v) {
var reg=/^[0-9]+$/;
if(!reg.test(v)) {
alert("请输入数字");
this.field.val(this.oldValue);
return;
}
if (v > this.limit) {
alert("必须小于最大值"+this.limit);
this.field.val(this.oldValue);
return;
}
this.field.val(v);
diff = v - this.oldValue;
this.oldValue = v;
if (this.next) {
this.next.adjust(-diff);
}
},
oldValue: $("#actualRiskVal" + i).val(),
adjust: function(diff) {
if (diff == 0) {
return;
}
var myVal = parseInt(this.getValue()) + diff;
if (myVal < 0 || myVal > this.limit) {
myVal = Math.max(0, Math.min(myVal, this.limit));
}
var myDiff = myVal - parseInt(this.oldValue) - diff;
this.field.val(myVal);
this.oldValue = myVal;
if (this.next) {
this.next.adjust(-myDiff);
}
}
};
if (i > 0) {
data[i - 1].next = data[i];
data[i].prev = data[i - 1];
}
}
</script>
</HTML>

正好有点事情,可能有些check还没写全,你先看看。
加载更多回复(4)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧