Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > проблемы с CASE


Автор: pythonwin 31.10.2006, 16:09
Всем привет!
Помогите, пожалуйста:
я делаю проверку значения поля (в этой части всё работало). но код получился почти не читаемый и я начал использовать switch case, после чего код перестал работать smile

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#">
<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>title</title>
<script type="text/javascript">
f1 = function (elem1){
switch (elem1.getAttribute("type_i")) {
case 1: 
    if (!elem1.value.match(/^\d*$/)||elem1.value==''){
    alert("not integers + ");
    return false;}
    else alert(12)
case 2: 
    if (elem1.value=='-.'){elem1.value=''};
    if (elem1.value=='.') {elem1.value=='0.0'}
    if (!elem1.value.match(/^\-?\d*\.?\d*$/)||elem1.value==''){
    alert("not float");
    return false;}
case 4: 
    if (elem1.value=='.') {elem1.value=='0.0'}
    if (elem1.value.match(/^\d{0,10}\.?$/)&&elem1.value!='') {elem1.value==elem1.value+'0'}
    if (!elem1.value.match(/^\d{0,10}\.?\d{0,2}$/)||elem1.value==''){
    alert("not currency");
    return false;}
case 5: 
{
    alert(5)
    if (!elem1.value.match(/^\-?\d*$/)||elem1.value==''){
    alert("not integers");
    return false;}}
case 6: 
    if (elem1.value=='.') {elem1.value=='0.0'}
    if (!elem1.value.match(/^\d*\.?\d*$/)||elem1.value==''){
    alert("not float");
    return false;}
}}
</script>
</head>

<body>

<form method="POST" name="TForm1" action="--WEBBOT-SELF--" onsubmit="javascript: return f1(this.intField_id);">
    <!--webbot bot="SaveResults" U-File="C:\test2\test2\test_html\_private\form_results.csv" S-Format="TEXT/CSV" S-Label-Fields="TRUE" -->
    <table>
    <tr>
    <td>
    <input type="text" name="T1" id="intField_id" size="20" type_i="1">
    </td>
    <td>
    <table>
    <tr>
    <td>
    <img border="0" src="../static/arrow_up.gif" width="11" height="5">
    </td>
    </tr>
    <tr>
    <td>
    <img border="0" src="../static/arrow_down.gif" width="11" height="5">
    </td>
    </tr>
    </table>
    </td>
    </tr>
    </table>
    <p><input type="submit" value="send" name="B1"><input type="reset" value="reset" name="B2"></p>
</form>

</body>

</html>

Автор: GIK 31.10.2006, 17:00
Ты в case проверяешь константу цифру, а атрибут type_i  имет тип char, или String (в JS)
Так что можешь сделать так:
case "1":
или конвертить данные из атрибута: type_i="1"
в тип int 

Автор: Nicholas_S 31.10.2006, 17:02
Вот примерно так это должно выглядеть (не забывай также про оператор break внутри switch()):
Код

...
function f1 (elem1)
{
  switch (parseInt(elem1.getAttribute("type_i")))
  {
    case 1:
      if (!elem1.value.match(/^\d*$/)||elem1.value=='')
      {
        alert("not integers + ");
        return false;
      }
      else
        alert(12)
    break;
  }
}
</script>
</head>
<body>
<form method="POST" onsubmit="return f1(document.getElementById('intField_id'));">
...

Автор: pythonwin 1.11.2006, 07:41
GIK, Nicholas_S,  спасибо! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)