khác nhau giữa "event.preventDefault()" và "return false"

Khi viết hàm callback cho một sự kiện nào đó như click vào một button để ngăn trình duyệt không xử lý sự kiện click theo như mặc định thì cả hai cách viết như ở dưới đây đều đưa về kết quả như nhau:

Cách 1: Sử dụng event.preventDefault().

$("button").click(function (event) {
    // code ...
    event.preventDefault()
});

Cách 2: Sử dụng return false;.

$("button").click(function () {
    // code ...
    return false;
});

Ngoài việc khi sử dụng return false thì không cần phải quan tâm tới tham số truyền vào là event thì giữa event.preventDefaul()return false còn có điểm nào khác nhau?

Hói 7 tháng trước

event.preventDefault()

Phương thức preventDefault() của đối tượng event được sử dụng để ngăn chặn cách xử lý mặc định của trình duyệt khi xảy ra sự kiện.

Ví dụ đoạn mã sau:

<a href="www.hoclaptrinh.org">Trang chủ</a>
<script type="text/javascript">
$("a").click(function (event) {
    alert("bạn đã nhấp vào link");
    event.preventDefault()
});
</script>

thì khi người dùng nhấp vào link liên kết trình duyệt sẽ hiển thị hộp thoại cảnh báo với nội dung:

bạn đã nhấp vào link

đồng thời ngăn cản trình duyệt chuyển tiếp người dùng tới trang đích của link liên kết.

event.stopPropagation()

Phương thức stopPropagation() của đối tượng event được sử dụng để ngăn không cho sự kiện lan toả lên các phần tử mẹ của phần tử mà ở đó diễn ra sự kiện.

Ví dụ với đoạn mã sau:

<p onclick="parentEventHandler()">
    <a href="www.hoclaptrinh.org">Trang chủ</a>
</p>
<script type="text/javascript">
// hàm callback xử lý sự kiện click vào phần tử "p"
function parentEventHandler() {
    alert("bạn đã nhấp chuột vào phần tử p");
};

// đoạn mã jQuery đăng ký hàm callback để xử lý sự kiện click vào phần tử "a"
$("a").click(function (event) {
    alert("bạn đã nhấp vào link");
    event.stopPropagation();
});
</script>

Thì khi người dùng click vào phần tử a (đồng thời cũng là click vào phần tử p chứa phần tử a) thì trình duyệt sẽ hiển thị hộp thoại cảnh báo với nội dung:

bạn đã nhấp vào link

Tiếp theo, sử dụng event.stopPropagation() trong hàm callback xử lý sự kiện nhấp chuột vào link liên kết sẽ ngăn cản sự kiện này lan toả tới phần tử mẹ p. Do đó hàm parentEventHandler() sẽ không được gọi và sẽ không có hộp thoại cảnh báo nào khác được hiện ra.

Cuối cùng, vì trong hàm callback không sử dụng event.preventDefault() nên sau đó trình duyệt vẫn sẽ chuyển người dùng tới trang chủ www.hoclaptrinh.org.

return false

Câu lệnh return false trong hàm callback của JavaScript để xử lý một sự kiện được dùng để thực hiện hai nhiệm vụ:

  • Ngăn chặn cách xử lý mặc định của trình duyệt khi sự kiện xảy ra giống như event.preventDefault().
  • Ngăn cản sự kiện lan toả tới phần tử mẹ giống như event.stopPropagation().

Ví dụ với đoạn mã sau:

<p onclick="parentEventHandler()">
    <a href="www.hoclaptrinh.org">Trang chủ</a>
</p>
<script type="text/javascript">
// hàm callback xử lý sự kiện click vào phần tử "p"
function parentEventHandler() {
    alert("bạn đã nhấp chuột vào phần tử p");
};

// đoạn mã jQuery đăng ký hàm callback để xử lý sự kiện click vào phần tử "a"
$("a").click(function (event) {
    alert("bạn đã nhấp vào link");
    return false;
});
</script>

Thì khi người dùng nhấp vào link liên kết một hộp thoại cảnh báo được hiện ra với nội dung như sau:

bạn đã nhấp vào link

Và sau đó không có bất cứ hành động nào khác diễn ra do return false ngăn cản trình duyệt chuyển tiếp người dùng tới trang đích của liên kết đồng thời ngăn cản sự kiện nhấp chuột lan toả tới phần tử mẹ p.

Trả lời 3 ngày trước

Viết Trả Lời: