鍍金池/ 問答/iOS  HTML/ 為什么index.js的這個請求沒有成功,console.log(search)

為什么index.js的這個請求沒有成功,console.log(search)在控制臺打印下馬上又刷新了,這是什么原因

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div>
    <form id="myform">
      <div class="input-field">
        <input type="search" id="books">
        <label for="search">Search books</label>
      </div>
      <button class="btn red">查詢</button>
    </form>
  </div>
  <div class="result">

  </div>
  <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
  <script src="https://cdn.bootcss.com/materialize/1.0.0-beta/js/materialize.min.js"></script>
  <script src="index.js"></script>
</body>
</html>

index.js:

$(document).ready(function() {
  console.log('jQuery sucessful')
  $("#myform").submit(function() {
    var search = $("#books").val();
    console.log(search);
    if(search === '') {
      alert('Please enter something');
    }else {
      var url = '';
      var img = '';
      var title = '';
      var author = '';

      $.get("https://www.googleapis.com/books/v1/volumes?q=" + search,function(res) {
        console.log(res);
      });
    }
  });

  return false;
});
回答
編輯回答
涼心人
  1. 首先,一個比較明顯的問題,Ls幾位都說過了,就是你的return false;語句,是位于.submit()的回調函數(shù)以外的,所以沒能阻止默認事件的觸發(fā),進而導致了頁面不正常的跳轉;
  2. 在回調里阻止默認事件,通常有兩種方式:第一種,就是在回調末尾寫上return false;,當然也可以return一個布爾變量,這時就會根據這個布爾變量的值,來決定是不是阻止事件默認行為;第二種,其實Ls也提到過,就是在回調一開始傳入事件對象e(當然有時也會是ev、evt、event等,看個人喜好,統(tǒng)一就行),然后調用.preventDefault()來達到實現(xiàn)阻止事件默認行為的目的,并且這句可以放到回調開始,如寫成:

    $("#myform").submit(function(e){
        e.preventDefault();
        // 這里再blablablabla……
    }

    用前一種或者后一種都無所謂,主要是讓代碼的邏輯清晰就好。

  3. 如果你決定只用js來做請求的話,還有一種方法,就是把觸發(fā)回調的按鈕的type改掉,讓它變成一個“單純”的按鈕,失去submit的功能,不去觸發(fā)submit事件,這時使用click事件來監(jiān)聽就行了,而且也不用阻止submit的默認行為。比如可以:

    <form id="myform">
        <div class="input-field">
            <input type="search" id="books">
            <label for="search">Search books</label>
        </div>
        <button type="button" class="btn red">查詢</button>
    </form>
    $("#myform").children('button').click(function(e){
        $.get("https://www.xxx.com/data?q=" + search)
            .done(function(data) {
                console.log(data);
            });
    })
2017年12月23日 05:45
編輯回答
青黛色

$("#myform").submit()觸發(fā)了表單默認提交事件。

$("#myform").submit(function(e){
    e.preventDefault();
    // do sth...
})
2017年8月5日 18:07
編輯回答
冷眸

注意這一句:return false; 。
你是不是想把它放在給 submit 傳入函數(shù)的后面,用于禁止表單提交?可是現(xiàn)在在外面。
馬上又刷新,是因為表單默認提交到本頁面,你可以看到現(xiàn)在的頁面相比之前,最后多了個問號。

解決辦法就是把 return false; 移到 submit 傳入的方法的最后。

2017年11月9日 14:40
編輯回答
別瞎鬧

頁面刷新是因為觸發(fā)了表單的默認提交事件,在submit事件里面加一句e.preventDefault()就好了

2017年1月12日 15:05
編輯回答
凝雅
$("#myform").submit(function() {
    //your code....
    return false;
});
2018年2月8日 02:09