【问题标题】:Javascript code without errors but doesn't workJavascript代码没有错误但不起作用
【发布时间】:2013-07-12 21:26:49
【问题描述】:

控制台或 JsLint 中不会弹出“真正的”错误。我个人更喜欢在 HTML 中使用 onclick,但在调试过程中我切换到了$("#buttonID1").click()。我不知道代码有什么问题。现场版在这里DEMO

输入:Amazon_Laser_BobtheBodyBuilder_07-11-13.xls

预期输出:|-\n|亚马逊\n|激光\n| BobtheBodyBuilder\n| 2013 年 7 月 7 日\n

实际输出:什么都没有!

JS

function emptyText() {
    $('#textinput').val('');
    $('#textoutput').val('');
}

$("#buttonID1").click(function(){
    var input = document.getElementById('textinput').value;
    var lines = input.split('\n');
    var output = '';
    $.each(lines, function(key, line) {
        var results = line.split(/[_\.]/);
            if(results!==null && results.length!== 0)
            {
                var a = '|-\n| '+results[0]+'\n';
                var b = '| '+results[1]+'\n';
                var c = '| '+results[2]+'\n';
                var d = results[3];
                var e = '| '+results[4]+'\n';

                var date = d.split(/[\-]/);
                var mm = date[0];
                var dd = date[1];
                var yy = date[2];
                var month = '';
                switch(mm){
                    case "01":
                        month='Jan';
                        break;
                    case "02":
                        month='Feb';
                        break;
                    case "03":
                        month='Mar';


            break;
                case "04":
                    month='Apr';
                    break;
                case "05":
                    month='May';
                    break;
                case "06":
                    month='June';
                    break;
                case "07":
                    month='Jul';
                    break;
                case "08":
                    month='Aug';
                    break;
                case "09":
                    month='Sep';
                    break;
                case "10":
                    month='Oct';
                    break;
                case "11":
                    month='Nov';
                    break;
                case "12":
                    month='Dec';
                    break;
                default:
                    break;
            }

            switch(yy){
                case "10":
                    yy='2010';
                    break;
                case "11":
                    yy='2011';
                    break;
                case "12":
                    yy='2012';
                    break;
                case "13":
                    yy='2013';
                    break;
                default:
                    break;
            }

            var date2 = '| '+month+' '+dd+', '+yy+'\n';
            output += a+b+c+date2+e;
        }
});
});

HTML

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>title</title>
  <link rel=href="https://dl.dropboxusercontent.com/u/101322542/Public%20Codes/mister%20table/Part%202%20-%20tokenizer/tokenizer.css" />

  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
  <script src="https://dl.dropboxusercontent.com/u/101322542/Public%20Codes/mister%20table/Part%202%20-%20tokenizer/tokenizer.js" type="text/javascript"></script>
 </head>
 <body>
   <p class="left">Put your variables here:</p>
  <textarea rows="4" cols="40" id="textinput">
</textarea>
   <br>
     <button type="button" id="buttonID1">AutoType</button>
     <button type="button" id="buttonID2" onclick="emptyText()">Clear</button>
   <p class="right">Output:</p>
   <textarea rows="4" cols="40" id="textoutput">
</textarea>
 </body>
</html>

CSS

#textinput{
  background-color:#285c00;
  color:white;
}

#textoutput{
  background-color:#285c00;
  color:white;
}

【问题讨论】:

  • 你调试了吗?在您知道预期什么输出可以缩小错误范围的地方注入 console.log?
  • 如果您在 HTML 中使用 onclick 时它有效,我觉得您可能没有将 Javascript 包装在文档就绪侦听器中。
  • 您是否考虑过使用一种或另一种类型的数组?
  • 我没有准备好使用文档。另外,当我 console.logged 时,所有的值都是完美的
  • 控制台输出对我来说看起来不错...到底出了什么问题?

标签: javascript jquery


【解决方案1】:

您忘记使用您构建的字符串。在函数末尾添加:

$('#textoutput').val(output);

Demonstration


这不是核心问题,但您可以在一些地方使您的代码更简单一些。

例如这个块

switch(yy){
    case "10":
        yy='2010';
        break;
    case "11":
        yy='2011';
        break;
    case "12":
        yy='2012';
        break;
    case "13":
        yy='2013';
        break;
    default:
        break;
}

可以替换为

yy = parseInt(yy, 10);
if (yy<100) yy+=2000;

(这会产生一个数字,适合处理数字,如果你愿意,可以在后面使用''+yy再次使其成为一个字符串)。

【讨论】:

  • 关于yy,有些yy是12,有些是2012(输入混淆了),这就是我使用switch case的原因
  • 使用month = ["","Jan","Feb","Mar","Apr"/*,...*/][parseInt(mm,10)];代替怪物开关。
【解决方案2】:

你应该把最后一行改成;

output += a+b+c+date2+e;
$('#textoutput').val(output);

【讨论】:

    【解决方案3】:

    您需要使用按钮实际添加文本。 所以,基本上,你忘记了这一行:

    document.getElementById('textoutput').value = output;
    

    在这一行之后:

    output += a+b+c+date2+e;
    

    在 JavaScript 文件中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2020-05-19
      相关资源
      最近更新 更多