<!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;
});
return false;
语句,是位于.submit()
的回调函数以外的,所以没能阻止默认事件的触发,进而导致了页面不正常的跳转;在回调里阻止默认事件,通常有两种方式:第一种,就是在回调末尾写上
return false;
,当然也可以return
一个布尔变量,这时就会根据这个布尔变量的值,来决定是不是阻止事件默认行为;第二种,其实Ls也提到过,就是在回调一开始传入事件对象e
(当然有时也会是ev
、evt
、event
等,看个人喜好,统一就行),然后调用.preventDefault()
来达到实现阻止事件默认行为的目的,并且这句可以放到回调开始,如写成:用前一种或者后一种都无所谓,主要是让代码的逻辑清晰就好。
如果你决定只用js来做请求的话,还有一种方法,就是把触发回调的按钮的type改掉,让它变成一个“单纯”的按钮,失去submit的功能,不去触发submit事件,这时使用click事件来监听就行了,而且也不用阻止submit的默认行为。比如可以: