2013-04-02 32 views
0

我不明白我做了什么错误,当我把内联的JavaScript和创建一个外部js文件。不能让它工作。它工作时,它是所有的HTML,但当我把它移动我的按钮不再工作。谁能帮忙?从内嵌JavaScript到外部文件,为什么不工作?

$().ready(init); 


function init() 
{ 

    $j('.num button:not(:contains(+/-),:contains(.))').click(addDigit); 
    $j('.num button:contains(.)').click(addDecimal); 
    $j('.num button:contains(+/-)').click(switchSign); 

    $j('.operator button:not(:contains(=),:contains(C))').click(applyOperator); 
    $j('.operator button:contains(=)').click(displayResult); 
    $j('.operator button:contains(C)').click(clearInput); 
} 





function addDigit() 
{ 
    Screen.append($j(this).text()); 
} 


function addDecimal() 
{ 
    var Input = Screen.readValue().split(' '); 

    var FinalExpr = Input[ Input.length-1 ]; 

    Input[ Input.length-1 ] = FinalExpr.replace('\.','') + '.'; 

    Screen.set(Input.join(' ')); 
} 


function switchSign() 
{ 
    var Input = Screen.readValue().split(' '); 

    var FinalExpr = Input[ Input.length-1 ]; 

    if (FinalExpr.charAt(0) == '-') 
    { 
     FinalExpr = FinalExpr.substring(1 , FinalExpr.length); 
    } 
    else 
    { 
     FinalExpr = '-' + FinalExpr; 
    } 

    Input[ Input.length-1 ] = FinalExpr; 

    Screen.set(Input.join(' ')); 
} 


function applyOperator() 
{ 
    Screen.append(' '+$j(this).text()+' '); 
} 


function displayResult() 
{ 
    Screen.displayResult(); 
} 


function clearInput() 
{ 
    Screen.clear(); 
} 


var Screen = 
{ 
    init: 
    function() 
    { 
     return this; 
    } 

    , ScreenSelector : '.results input:text' 
    , ResetNextAppend : true 


    , set: 
    function(value) 
    { 
     $j(this.ScreenSelector).val(value); 
    } 


    , append: 
    function(value) 
    { 
     if (this.ResetNextAppend == true || $j(this.ScreenSelector).val() == 0) 
     { 
      if (value.substring(0,1).search(/\d/) != -1) 
      { 
       this.clear(); 
      } 
      this.ResetNextAppend = false; 
      $j(this.ScreenSelector).removeClass('rna'); 
     }; 

     $j(this.ScreenSelector).val($j(this.ScreenSelector).val() + value); 
    } 


    , readValue: 
    function() 
    { 
     return $j(this.ScreenSelector).val(); 
    } 


    , readResult: 
    function() 
    { 
     return this.calculate(this.readValue()); 
    } 

    , displayResult: 
    function() 
    { 
     this.ResetNextAppend = true; 
     $j(this.ScreenSelector).addClass('rna');   

     $j(this.ScreenSelector).val(this.readResult()); 
    } 


    , calculate: 
    function(expression) 
    { 
     return eval(this.convertChars(expression)); 
    } 

    , convertChars: 
    function(text) 
    { 
     text = text.replace(String.fromCharCode(215),'*'); 
     text = text.replace(String.fromCharCode(247),'/'); 

     return text; 
    } 


    , clear: 
    function() 
    { 
     this.ResetNextAppend = false; 
     $j(this.ScreenSelector).removeClass('rna'); 

     $j(this.ScreenSelector).val(''); 
    } 


}; 

和我的HTML代码是:

<link rel="stylesheet" type="text/css" href="A05ReDoCSS.css"> 
</head> 
<body> 
<h1>Sara's Calculator</h1> 
<div id="A05"> 
<fieldset class="results"> <!-- use of fieldset keeps out a bunch of divs --> 
<input type="text"/> 
</fieldset> 
<fieldset class="num pad"> 
<button type="button">1</button> 
<button type="button">2</button> 
<button type="button">3</button> 
<button type="button">4</button> 
<button type="button">5</button> 
<button type="button">6</button> 
<button type="button">7</button> 
<button type="button">8</button> 
<button type="button">9</button> 
<button type="button">0</button> 
<button type="button">+/-</button> <!-- switch --> 
<button type="button">.</button> 
</fieldset> 
<fieldset class="operator pad"> <!-- this is the operations area --> 
<button type="button">+</button> 
<button type="button">-</button> 
<button type="button">&times;</button> 
<button type="button">&divide;</button> 
<button type="button">=</button> 
<button type="button">C</button> 
</fieldset> 
</div> 
<br class="break"/> 
<script type="text/javascript" src="A05ReDoJS.js"></script> 
</body> 
</html> 
+0

什么不工作?你是否得到了具体的错误,或者什么都没有发生? –

+0

你想要调用一个函数吗? –

+0

你在脚本中包含jQuery吗?什么是$ j或$()。ready(init);任何控制台错误? –

回答

0

可能是由于进口的.js文件是在底部一路。

+0

仅当在定义jquery之前调用它。 –

+0

错误:ReferenceError:$未定义 Line:1 – Sara

+0

我尝试添加额外的脚本,但仍然收到错误$ j未定义。我不知道如何定义它。 – Sara

1

请确保您有

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script> 

某处在<head>

否则该函数不知道什么$是。

0

快速提示:如果您使用的是HTML5的文档类型,即<!DOCTYPE html>,则不必包含type='text/javascript'。你可以写:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js'></script>

+0

我曾尝试添加额外的脚本,但仍然收到$ j未定义的错误。我不知道如何定义它。 – Sara

相关问题