抢焦点的死循环。onblur="checkMoney();">-->>>onchange="checkMoney();">
不过
像这样比较大小的判断,应该放在提交之前验证
而不是放在输入完就立即验证。

解决方案 »

  1.   

    验证改成这样看看要好一些:
    <from name="frm">
    .....
    <tr>
              <td><DIV align=right>金额范围:</DIV></td>
              <td colspan="3" nowrap>&nbsp;大于
                <input name="devDeviceLMoney" size="20" type="text" id="devDeviceLMoney" onkeypress="return event.keyCode>=48&&event.keyCode<=57||event.keyCode==46"
                  onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false" style="ime-mode:Disabled" >
                &nbsp;&nbsp;小于
                <input name="devDeviceHMoney" size="20" type="text" id="devDeviceHMoney" onkeypress="return event.keyCode>=48&&event.keyCode<=57||event.keyCode==46"
                  onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false" style="ime-mode:Disabled" >
                <select name="devUnit" id="devUnit" onchange="getQueryResult();">
                  <option value="10000">万元</option>
                  <option value="1">元</option>
                </select></td>
               <br> <input type="button" value="button1" name="chech" onclick="javascript:checkMoney()">
              </tr>
    </form><script language="javascript">
    function checkMoney(){
    var strLow,strHight;
    var low,hight;

    strLow=trim(frm.devDeviceLMoney.value);
    strHight=trim(frm.devDeviceHMoney.value);
    if(strLow.length!=0 && strHight.length!=0){
    low=parseFloat(trim(frm.devDeviceLMoney.value));
    hight=parseFloat(trim(frm.devDeviceHMoney.value));
    if(hight<low){
    alert("错误:请注意查询时设备金额范围的逻辑!");

    if(event.srcElement.name=="devDeviceHMoney"){
    frm.devDeviceHMoney.focus();
    frm.devDeviceHMoney.select();
    return false;
    }
    else if(event.srcElement.name=="devDeviceLMoney"){
    frm.devDeviceLMoney.focus();
    frm.devDeviceLMoney.select();
    return false;
    }
    //return false;
    }
    }
    getQueryResult();</script>
      

  2.   

    改为onchange也出现同样的情况啊
    请教一下,我怎取消原来的动作。
    如:出错后选择其中任一个输入框,点击另一个框,
    这时第一个框激发了事件checkMoney,我怎样取消掉另一个框的点击事件,是不是这样就可以避免死循环?还有,怎样决断当前focus在哪像呢?
      

  3.   

    改成onchange后若还有死循环,那就是“getQueryResult();”的问题。
    如下代码,注释掉“getQueryResult();”后,效果是正常的,并没有死循环。<form name="frm">
    .....
    <tr>
              <td><DIV align=right>金额范围:</DIV></td>
              <td colspan="3" nowrap>&nbsp;大于
                <input name="devDeviceLMoney" size="20" type="text" id="devDeviceLMoney" onkeypress="return event.keyCode>=48&&event.keyCode<=57||event.keyCode==46"
                  onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false" style="ime-mode:Disabled" onchange="checkMoney();">
                &nbsp;&nbsp;小于
                <input name="devDeviceHMoney" size="20" type="text" id="devDeviceHMoney" onkeypress="return event.keyCode>=48&&event.keyCode<=57||event.keyCode==46"
                  onpaste="return !clipboardData.getData('text').match(/\D/)" ondragenter="return false" style="ime-mode:Disabled" onchange="checkMoney();">
                <select name="devUnit" id="devUnit" onchange="getQueryResult();">
                  <option value="10000">万元</option>
                  <option value="1">元</option>
                </select></td>
              </tr>
    </form><script language="javascript">
    function checkMoney(){
    var strLow,strHight;
    var low,hight;

    strLow=trim(frm.devDeviceLMoney.value);
    strHight=trim(frm.devDeviceHMoney.value);
    if(strLow.length!=0 && strHight.length!=0){
    low=parseFloat(trim(frm.devDeviceLMoney.value));
    hight=parseFloat(trim(frm.devDeviceHMoney.value));
    if(hight<low){
    alert("错误:请注意查询时设备金额范围的逻辑!");

    if(event.srcElement.name=="devDeviceHMoney"){
    frm.devDeviceHMoney.focus();
    frm.devDeviceHMoney.select();
    return false;
    }
    else if(event.srcElement.name=="devDeviceLMoney"){
    frm.devDeviceLMoney.focus();
    frm.devDeviceLMoney.select();
    return false;
    }
    //return false;
    }
    }
    //getQueryResult();
    }</script>