2014-07-21 41 views
0

是否有一個原因,該代碼:jQuery函數不改變全局變量,而常規的JavaScript功能做

var verb = ""; 

    function printPage (input) { 
      $("div").append(input + "<br>"); 
    } 

    $("#submit").click(function() { 
     verb = $('#enter').val(); 
     printPage(verb); 
    }); 

    printPage(verb); 

只導致#進入(形式)在click事件被記錄一次的值(而最後的PrintPage打印原有空字符串),而該代碼:

var verb = ""; 

function printPage (input) { 
     $("div").append(input + "<br>"); 
} 

function buttonClick() { 
    verb = "verb!"; 
    printPage(verb); 
} 

buttonClick(); 
printPage(verb); 

打印動詞兩次,因爲功能已成功地改變了動詞變量的值?很抱歉,如果我沒有足夠好地解釋我的問題,我會在需要時詳細說明。

+0

try without var ... like verb =「」;如果你不得不做任何全球性的事情,那麼不要使用var。 – Rahul

+1

傳遞給'$(「#submit」).click(...)'的函數將在您單擊按鈕時觸發* only *。而在第二種情況下,由於您明確調用了'buttonClick()',它會記錄兩次。 – techfoobar

+0

#enter是輸入還是html標記? – Sweetz

回答

0

您的buttonClick函數在printPage函數之前運行 - 並且這使得verb變量保持「verb!」。 函數運行兩次後verb var有'動詞!'它的價值。

在jQuery的情況下,printPage函數立即運行,而verb爲空。只有當您點擊該按鈕時,verb纔有值。

+1

我明白你的意思了。所以如果我能以某種方式運行console.log(動詞);點擊按鈕後,它會正確地將表單值記錄到控制檯? – cardboardtheory

+0

是的 - 沒錯。直到按鈕被點擊,動詞是空的。 – user3692927

1

輸入值可能是空的,所以你可能會看到改變,你可以使用這樣的:

verb = $('#enter').val() || 'verb'; 
0

的jQuery與否,如果是運行你的方法,將改變變量和$如果該值( '#enter')不是空白的(否則,你不會看到改變)。

要測試這一點,請在verb = $('#enter').val();之前和之後放置console.log(verb);。你會看到你的onClick方法沒有被調用,或者甚至沒有值。

var verb = ""; 

function printPage (input) { 
     $("div").append(input + "<br>"); 
} 

$("#submit").click(function() { 
    console.log(verb); 
    verb = $('#enter').val(); 
    console.log(verb); 
    printPage(verb); 
    console.log(verb); 
}); 

printPage(verb); 

我的猜測是,你沒有使用正確的選擇(而不是#進入,你應該使用不同的ID /類選擇),或者該值實際上是空的。

編輯︰如果你想知道什麼console.log正在做,它將它寫入您的瀏覽器的控制檯(道歉,如果你已經知道這一點)。應該仔細打開它並查看我們正在打印的調試日誌。

你也可以只是提醒(動詞),如果你想這樣做,而不是。

+0

我以錯誤的方式接近問題!問題在於由於未按下按鈕,動詞值爲空。感謝您的輸入! – cardboardtheory