簡體   English   中英

Javascript:從HTML輸入返回值的問題

[英]Javascript: Issues returning a value from a HTML input

我試圖對我的持續存在的問題做出一個明確的解釋,即為什么某個函數有時可以輸出到控制台日志,但不會給出返回值。

特別是在這種情況下,我試圖從HTML輸入中獲取一個值,檢查其是否通過測試,然后返回true或false。

我下面有4種變化。 我想要的是變體1返回。 沒有。 但是,它確實有控制台日志(這是變體2)。但令我感到困惑的是,變體4與變體1的代碼相同,但是從控制台而不是HTML按鈕被調用,但確實返回。

 <!DOCTYPE html> <head> <meta charset="UTF-8"> <titleharset="UTF-8"> <title>Check if number passes a test</title> </head> <html> <body> <input type="text" class="input"> <input type="button" class="btn" value="test" onclick="test(document.querySelector('.input').value)"> <input type="text" class="input2"> <input type="button" class="btn" value="test2" onclick="test2(document.querySelector('.input2').value)"> <input type="text" class="input3"> <input type="button" class="btn" value="test3" onclick="test3(document.querySelector('.input3').value)"> </body> <script> // Variation 1: Called from HTML input. Doesn't return function test(input) { if (input % 3 == 0 || input % 7 == 0) { return true } else { return false } } // Variation 2: Called from HTML input. Will console.log function test2(input) { if (input % 3 == 0 || input % 7 == 0) { console.log(true) } else { console.log(false) } } // Variation 3: Called from HTML input. Set to variable (one return) Doesn't return function test3(input) { let result = Boolean; if (input % 3 == 0 || input % 7 == 0) { result = true } else { result = false } return result } // Variation 4: Called from console. Will return! function test4(n) { if (n % 3 == 0 || n % 7 == 0) { return true; } else { return false; } } console.log(test4(15)); console.log(test4(21)); console.log(test4(2)); console.log(test4(11)); </script> </html> 

我不確定您的期望。 您正在運行此代碼

onclick="test(document.querySelector('.input').value)"

它調用一個返回true或false的函數。 您無需使用返回的布爾值,因此什么也不會發生。 不會向控制台發送日志,因為您沒有在寫入控制台。

因此,如果您嘗試不提交按鈕,則需要在onclick上添加return以便可以使用它。

onclick="return test(document.querySelector('.input').value)"

如果您希望它像第四個示例一樣寫入控制台,則需要看起來像onclick中的第四個示例

onclick="console.log(test(document.querySelector('.input').value))"

在第二個按鈕中將其輸出到控制台的原因是您的代碼告訴它

function test2(input) {
    if (input % 3 == 0 || input % 7 == 0) {
      console.log(true)
    } else {
      console.log(false)
    }
  }  

您的第一個和第三個函數在單擊時會觸發,但是它們返回值,而不是通過控制台記錄它們。

function test(input) {
if (input % 3 == 0 || input % 7 == 0) {
  return true
} else {
  return false
}

我將輸入類型更改為數字,如下所示:

<input type="number" class="input">

這樣,它就是一個數字,但只是要確保我會用數字包裝器編寫所有三個函數,確保輸入的內容是它們console.loggin的數字。 像這樣

function test2(input) {
var num2 = Number(input);
if (num2 % 3 === 0 || num2 % 7 === 0) {
  console.log(true)
} else {
  console.log(false)
}

}

您正在嘗試對字符串進行數學運算。 將您的<input>類型屬性從文本更改為數字。

編輯:可能需要添加parseInt()才能真正轉換為整數類型,而不是字符串類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM