精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

離開頁面前,如何防止表單數據丟失?

開發 前端
本文將演示如何實現一個 FormPrompt 組件,當用戶嘗試離開具有未保存更改的頁面時,會發出警報,從而有效地提高整體用戶體驗。

本文介紹了如何實現一個FormPrompt組件,在用戶嘗試離開具有未保存更改的頁面時發出警告。文章討論了如何使用純JavaScript和beforeunload事件處理這類情況,以及使用React Router v5中的Prompt組件和useBeforeUnload以及unstable等React特定解決方案。向用戶添加一個確認對話框,詢問他們在具有未保存表單更改的情況下是否確認重定向是一種良好的用戶體驗實踐。通過顯示此提示,用戶將意識到他們有未保存的更改,并允許在繼續重定向之前保存或丟棄它們的工作。

下面是正文:

在今天的數字化環境中,為涉及表單提交的 Web 應用程序提供最佳用戶體驗非常重要。用戶常見的一個煩惱來源是由于意外離開頁面而丟失未保存的更改。

本文將演示如何實現一個 FormPrompt 組件,當用戶嘗試離開具有未保存更改的頁面時,會發出警報,從而有效地提高整體用戶體驗。我們將討論如何使用純 JavaScript 處理此類情況,使用 React Router v5 中的 Prompt 組件以及在 React Router v6 中使用 useBeforeUnload 和 unstable_useBlocker 鉤子的特定解決方案。

應用程序的最終版本可以在 CodeSandbox 上進行測試,代碼可在 GitHub 上獲得。

使用 beforeunload 事件檢測頁面離開

我們創建 FormPrompt 組件,在其中添加 beforeunload 事件的監聽器。此事件將在用戶離開頁面之前觸發。通過在事件上調用 preventDefault 方法,我們可以觸發瀏覽器的確認對話框。僅當表單具有未保存的更改(由 hasUnsavedChanges 屬性指示)時,才會激活此對話框。

// FormPrompt.js

import { useEffect } from "react";

export const FormPrompt = ({ hasUnsavedChanges }) => {
  useEffect(() => {
    const onBeforeUnload = (e) => {
      if (hasUnsavedChanges) {
        e.preventDefault();
        e.returnValue = "";
      }
    };
    window.addEventListener("beforeunload", onBeforeUnload);
    return () => {
      window.removeEventListener("beforeunload", onBeforeUnload);
    };
  }, [hasUnsavedChanges]);
};

作為示例,我們將在表單的 Contact 步驟中使用此組件:

// Steps/Contact.js

import { forwardRef } from "react";
import { useForm } from "react-hook-form";
import { useAppState } from "../state";
import { Button, Field, Form, Input } from "../Forms";
import { FormPrompt } from "../FormPrompt";

export const Contact = forwardRef((props, ref) => {
  const [state, setState] = useAppState();
  const {
    handleSubmit,
    register,
    formState: { isDirty },
  } = useForm({
    defaultValues: state,
    mode: "onSubmit",
  });

  const saveData = (data) => {
    setState({ ...state, ...data });
  };

  return (
    <Form onSubmit={handleSubmit(saveData)} nextStep={"/education"}>
      <FormPrompt hasUnsavedChanges={isDirty} />
      <fieldset>
        <legend>Contact</legend>
        <Field label="First name">
          <Input {...register("firstName")} id="first-name" />
        </Field>
        <Field label="Last name">
          <Input {...register("lastName")} id="last-name" />
        </Field>
        <Field label="Email">
          <Input {...register("email")} type="email" id="email" />
        </Field>
        <Field label="Password">
          <Input {...register("password")} type="password" id="password" />
        </Field>
        <Button ref={ref}>Next {">"}</Button>
      </fieldset>
    </Form>
  );
});

當在表單字段中輸入數據并在保存更改之前嘗試重新加載頁面或導航到外部URL時,瀏覽器將顯示確認對話框。

使用React Router 5防止頁面導航

這個組件已經足夠好用于我們的應用程序,因為它的所有頁面都是表單的一部分。然而,在實際情況下,這并不總是如此。為了使我們的示例更具代表性,我們添加一個名為 Home 的新路由,它將重定向到表單之外。 Home 組件很簡單,只顯示一個主頁問候語。

// Home.js

export const Home = () => {
  return <div>Welcome to the home page!</div>;
};

我們還需要對 App 組件進行一些調整,以適應這條新路由。

// App.js

import { useRef } from "react";
import {
  BrowserRouter as Router,
  Routes,
  Route,
  NavLink,
} from "react-router-dom";
import { AppProvider } from "./state";
import { Contact } from "./Steps/Contact";
import { Education } from "./Steps/Education";
import { About } from "./Steps/About";
import { Confirm } from "./Steps/Confirm";
import { Stepper } from "./Steps/Stepper";
import { Home } from "./Home";

export const App = () => {
  const buttonRef = useRef();

  const onStepChange = () => {
    buttonRef.current?.click();
  };

  return (
    <div className="App">
      <AppProvider>
        <Router>
          <div className="nav-wrapper">
            <NavLink to={"/"}>Home</NavLink>
            <Stepper onStepChange={onStepChange} />
          </div>
          <Routes>
            <Route path="/" element={<Home />} />
            <Route path="/contact" element={<Contact ref={buttonRef} />} />
            <Route path="/education" element={<Education ref={buttonRef} />} />
            <Route path="/about" element={<About ref={buttonRef} />} />
            <Route path="/confirm" element={<Confirm />} />
          </Routes>
        </Router>
      </AppProvider>
    </div>
  );
};

我們可以看到當我們在表格中輸入信息并導航到主頁時,輸入的數據不會被保存,也不會出現任何確認對話框。這是因為導航由React Router處理,不會觸發 beforeunload 事件,使瀏覽器API在這種情況下無效。幸運的是,React Router v5提供了 Prompt 組件,以在離開未保存更改的頁面之前警告用戶。該組件接受兩個props: when 和 message 。 when 屬性是一個布爾值,用于確定是否應該顯示提示,而 message 屬性表示向用戶顯示的文本。

使用 Prompt 時,導航到主頁路由時行為正確,但是當用戶輸入表單數據并進入下一步時,確認對話框也會出現。這是不希望的,因為我們在導航到下一步時保存表單數據。

為了解決這個問題,我們需要驗證下一個 URL 是否是表單步驟之一,然后再檢查未保存的更改。可以使用 message 屬性來實現這一點,它也可以是一個函數。該函數的第一個參數是下一個位置。如果函數返回 true ,則允許轉換到下一個 URL;否則,它可以返回一個字符串來顯示提示。

// FormPrompt.js

import { useEffect } from "react";
import { Prompt } from "react-router-dom";

const stepLinks = ["/contact", "/education", "/about", "/confirm"];

export const FormPrompt = ({ hasUnsavedChanges }) => {
  useEffect(() => {
    const onBeforeUnload = (e) => {
      if (hasUnsavedChanges) {
        e.preventDefault();
        e.returnValue = "";
      }
    };
    window.addEventListener("beforeunload", onBeforeUnload);

    return () => {
      window.removeEventListener("beforeunload", onBeforeUnload);
    };
  }, [hasUnsavedChanges]);

  const onLocationChange = (location) => {
    if (stepLinks.includes(location.pathname)) {
      return true;
    }
    return "You have unsaved changes, are you sure you want to leave?";
  };

  return <Prompt when={hasUnsavedChanges} message={onLocationChange} />;
};

通過這些更改,我們可以安全地在表單步驟之間導航,并在嘗試離開未保存更改的表單時收到警告。

使用 React Router 6 防止頁面導航

件已被移除,而 unstable_usePrompt 鉤子在 6.7.0 版本中被添加。正如其名稱所示,該鉤子的實現可能會發生變化,尚未記錄文檔。但是,它應該適用于我們的使用情況。

我們可以使用這個鉤子來復制版本5中 Prompt 組件的行為,但首先,我們需要調整我們的 App 組件以使用新的數據路由器,因為它們是 unstable_usePrompt 鉤子工作所必需的。

// App.js

import { useRef } from "react";
import { createBrowserRouter, RouterProvider, Outlet } from "react-router-dom";
import { AppProvider } from "./state";
import { Contact } from "./Steps/Contact";
import { Education } from "./Steps/Education";
import { About } from "./Steps/About";
import { Confirm } from "./Steps/Confirm";
import { Stepper } from "./Steps/Stepper";
import { Home } from "./Home";

export const App = () => {
  const buttonRef = useRef();

  const onStepChange = () => {
    buttonRef.current?.click();
  };

  const router = createBrowserRouter([
    {
      element: (
        <>
          <Stepper onStepChange={onStepChange} />
          <Outlet />
        </>
      ),
      children: [
        {
          path: "/",
          element: <Home />,
        },
        {
          path: "/contact",
          element: <Contact ref={buttonRef} />,
        },
        { path: "/education", element: <Education ref={buttonRef} /> },
        { path: "/about", element: <About ref={buttonRef} /> },
        { path: "/confirm", element: <Confirm /> },
      ],
    },
  ]);

  return (
    <div className="App">
      <AppProvider>
        <RouterProvider router={router} />
      </AppProvider>
    </div>
  );
};

我們使用 createBrowserRouter 函數來創建路由器。請注意, Stepper 沒有單獨的路徑,所有其他路由都是它的子路由。它作為布局組件,在每個頁面上呈現。每個頁面的內容顯示在特殊的 Outlet 組件的位置。為了簡化 App 邏輯,我們還將主頁導航鏈接移動到 Stepper 中。

設置完成后,我們現在可以實現重定向阻止功能。我們首先通過在 FormPrompt 中使用在6.6版本中引入的 useBeforeUnload 鉤子來替換 onbeforeunload 邏輯。

// FormPrompt.js

import { useEffect, useCallback, useRef } from "react";
import { useBeforeUnload } from "react-router-dom";

const stepLinks = ["/contact", "/education", "/about", "/confirm"];

export const FormPrompt = ({ hasUnsavedChanges }) => {
  useBeforeUnload(
    useCallback(
      (event) => {
        if (hasUnsavedChanges) {
          event.preventDefault();
          event.returnValue = "";
        }
      },
      [hasUnsavedChanges]
    ),
    { capture: true }
  );

  return null;
};

這個改變簡化了我們組件的邏輯。現在,我們可以添加一個自定義的 usePrompt 鉤子,并像版本5中的 Prompt 組件一樣使用它。

// FormPrompt.js

import { useEffect, useCallback, useRef } from "react";
import {
  useBeforeUnload,
  unstable_useBlocker as useBlocker,
} from "react-router-dom";

const stepLinks = ["/contact", "/education", "/about", "/confirm"];

export const FormPrompt = ({ hasUnsavedChanges }) => {
  const onLocationChange = useCallback(
    ({ nextLocation }) => {
      if (!stepLinks.includes(nextLocation.pathname) && hasUnsavedChanges) {
        return !window.confirm(
          "You have unsaved changes, are you sure you want to leave?"
        );
      }
      return false;
    },
    [hasUnsavedChanges]
  );

  usePrompt(onLocationChange, hasUnsavedChanges);
  useBeforeUnload(
    useCallback(
      (event) => {
        if (hasUnsavedChanges) {
          event.preventDefault();
          event.returnValue = "";
        }
      },
      [hasUnsavedChanges]
    ),
    { capture: true }
  );

  return null;
};

function usePrompt(onLocationChange, hasUnsavedChanges) {
  const blocker = useBlocker(hasUnsavedChanges ? onLocationChange : false);
  const prevState = useRef(blocker.state);

  useEffect(() => {
    if (blocker.state === "blocked") {
      blocker.reset();
    }
    prevState.current = blocker.state;
  }, [blocker]);
}

useBlocker 鉤子接受布爾值或阻止函數作為其參數,類似于 Prompt 組件中的 message 屬性。該函數的一個參數是下一個位置,我們使用它來確定用戶是否正在離開我們的表單。如果是這種情況,我們利用瀏覽器的 window.confirm 方法顯示一個對話框,詢問用戶確認重定向或取消它。最后,我們在 usePrompt 鉤子中抽象出阻止邏輯并管理阻止器的狀態。

我們可以通過導航到聯系步驟,填寫一些字段并單擊主頁導航項來測試 FormPrompt 是否按預期工作。我們會看到一個確認對話框,詢問我們是否要離開該頁面。

總結

總之,為未保存的表單更改實現確認對話框是增強用戶體驗的重要實踐。本文演示了如何創建一個 FormPrompt 組件,當用戶嘗試離開具有未保存更改的頁面時,該組件會向用戶發出警告。我們探討了如何使用純JavaScript處理這種情況,使用 beforeunload 事件以及在React中使用React Router v5中的 Prompt 組件和React Router v6中的 useBeforeUnload 和 unstable_useBlocker 鉤子。通過將此功能合并到您的表單中,你可以幫助用戶避免失去未保存的工作而感到沮喪。

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

責任編輯:姜華 來源: 大遷世界
相關推薦

2016-09-27 19:28:37

2020-03-10 10:37:48

數據丟失數據泄露網絡安全

2009-07-02 15:12:39

2011-07-22 09:51:51

iPhone FROM 表單

2009-07-03 14:41:03

2016-12-13 13:54:10

EasyUI form數據加載

2012-06-05 10:15:43

jQuery

2021-09-14 18:33:39

React 數據交互

2020-06-17 14:40:49

用戶頁面前端

2010-06-10 18:08:58

2009-07-02 11:29:22

JSP技術表單數據存儲

2012-07-10 14:15:42

前端開發

2010-12-21 15:56:43

桌面文件權限管理防止數據丟失

2009-08-26 10:41:21

防止數據丟失

2025-06-30 07:20:00

Web開發API

2025-09-25 13:51:13

2020-10-21 11:37:12

Redis數據庫命令

2009-11-06 13:40:07

2016-07-05 09:38:08

2023-07-11 15:02:34

數據丟失人工智能
點贊
收藏

51CTO技術棧公眾號

国产九九视频一区二区三区| 亚洲乱码一区| 中文字幕免费不卡| 91久久精品日日躁夜夜躁国产| 男的操女的网站| 国产伦精品一区二区三区在线播放 | 日韩在线观看| 欧美成人精品福利| 日韩视频在线免费看| 性欧美videos高清hd4k| 久久久欧美精品sm网站| 97欧洲一区二区精品免费| 国产精品suv一区| 亚洲日本韩国在线| 免费观看一级欧美片| **性色生活片久久毛片| 久热国产精品视频一区二区三区 | 欧美福利一区二区| a√天堂在线观看| 91高清在线观看视频| 久久久久久久综合日本| 成人av资源网| 亚洲精品久久久久久久蜜桃| 激情成人亚洲| 欧美成人精品xxx| 夫妇露脸对白88av| 亚洲精品456| 亚洲成人亚洲激情| 国产又粗又猛大又黄又爽| 日韩精品第一| 色呦呦网站一区| 国产不卡一区二区视频| 污污视频在线看| 亚洲日本一区二区三区| 亚洲 国产 欧美一区| 飘雪影院手机免费高清版在线观看| 国产久卡久卡久卡久卡视频精品| 国产日韩中文字幕| 中文亚洲av片在线观看| 销魂美女一区二区三区视频在线| 久久久久久国产精品| 永久看片925tv| 亚洲精品网址| 久久亚洲私人国产精品va| 蜜臀久久99精品久久久久久| 天天操综合520| 亚洲激情 国产| bl动漫在线观看| 极品尤物一区| 亚洲第一天堂无码专区| 动漫美女无遮挡免费| 538任你躁精品视频网免费| 制服丝袜日韩国产| 爽爽爽在线观看| 在线免费成人| 日韩欧美三级在线| 亚洲最大视频网| 成人av综合网| 日韩成人久久久| 老鸭窝一区二区| 国产探花一区在线观看| 国产一区二区三区在线看| 精品无人区无码乱码毛片国产 | 四虎国产精品免费久久| 欧美乱妇15p| 亚洲一级片免费观看| 99re8这里有精品热视频8在线| 欧美第一区第二区| 欧美日韩人妻精品一区在线| 欧美日韩一本| 国产亚洲欧美另类中文| 激情高潮到大叫狂喷水| 欧美伊人影院| 91精品国产九九九久久久亚洲| 9i看片成人免费看片| 日本女人一区二区三区| 91色视频在线导航| 国产一区视频在线播放| 欧美videossex极品| 爽好多水快深点欧美视频| 国产精品亚洲综合天堂夜夜| 国产精品久久无码一三区| 国产99久久久国产精品潘金 | 欧美一级精品片在线看| 久久久91精品国产| 男人天堂中文字幕| 日韩影院精彩在线| 亚洲自拍小视频免费观看| 性插视频在线观看| 国产精品国产三级国产三级人妇 | 看电视剧不卡顿的网站| 亚洲xxx视频| 男男电影完整版在线观看| 国产精品高潮久久久久无| 人人妻人人做人人爽| jizz欧美| 亚洲精品美女网站| 黄视频网站免费看| 久久精品人人| 99在线视频首页| av在线免费观看网| 黄色91在线观看| 午夜一级免费视频| 国产精品一在线观看| 欧美成人合集magnet| 无码人妻黑人中文字幕| 成人在线视频一区| 一区二区三区四区| 黑人巨大精品| 亚洲精品一区二区三区在线观看| www.99热| 国产亚洲一级| 99re视频在线| 欧美性videos| 欧美在线色视频| 99久久人妻无码中文字幕系列| 91精品高清| 国产精品网红直播| 九色视频在线观看免费播放| 亚洲成人动漫av| 在线观看中文av| 久久激情电影| 国产精品成久久久久三级| 少妇高潮一区二区三区69| 亚洲码国产岛国毛片在线| 777视频在线| 国产一区99| 7777精品伊人久久久大香线蕉经典版下载| www.日韩免费| 九九视频免费看| 国产在线播精品第三| 四虎影院一区二区三区| 午夜欧美巨大性欧美巨大| 日韩av在线播放资源| 国产亚洲精品久久777777| 国产一二精品视频| 在线精品亚洲一区二区| 成人交换视频| 中文字幕日韩免费视频| 国产精品久久久久久久久夜色| www.66久久| 丁香花在线影院观看在线播放| 日韩高清一区| 九色精品免费永久在线| 精品人妻久久久久一区二区三区| 中文字幕亚洲精品在线观看| 999在线观看| 五月精品视频| 91久久精品视频| 色呦呦网站在线观看| 日韩精品一区在线| 国产一级二级毛片| 北条麻妃一区二区三区| 男女私大尺度视频| 人人精品视频| 日本午夜人人精品| 国产h在线观看| 欧美日韩中文国产| 国产视频123区| 久久精品免费观看| 国产奶头好大揉着好爽视频| 欧美在线se| 久久夜色撩人精品| 性一交一乱一色一视频麻豆| 亚洲一区二区三区精品在线| 国产污在线观看| 国产亚洲网站| 一区二区三区四区五区视频| 欧美综合社区国产| 欧美日韩成人免费| 污视频网站在线播放| 欧美午夜影院在线视频| 人妻精品久久久久中文| 久久精品72免费观看| 欧美 国产 精品| 日韩高清影视在线观看| 国产精品吹潮在线观看| 搞黄网站在线观看| 亚洲第一区中文字幕| 日本丰满少妇做爰爽爽| 中文字幕在线免费不卡| xxxxwww一片| 午夜啪啪福利视频| 秋霞综合在线视频| 国产有码一区二区| 91精品国产黑色瑜伽裤| 国产亚洲精品一区二555| 国产欧美日韩成人| 午夜精品免费在线观看| 欧美a在线播放| 成人精品电影在线观看| 奇米影音第四色| 狠狠综合久久| 五月天综合网| 国内精品偷拍| 成人激情视频免费在线| 三级中文字幕在线观看| 日韩日本欧美亚洲| 深夜视频在线免费| 欧美一级精品大片| 国产精品久久久999| 精品国精品国产自在久不卡| 日韩欧美在线视频观看| 欧美日韩精品在线观看视频| 久久久久久免费毛片精品| gogo亚洲国模私拍人体| 日韩中文字幕1| av免费观看网| 欧美二区视频| 一本色道久久99精品综合| 欧美三级自拍| 99国精产品一二二线| 视频一区在线免费看| 国产+人+亚洲| h片在线免费| 亚洲人成在线观| 神马久久久久久久久久| 欧美一级久久久久久久大片| 久久午夜鲁丝片| 欧美色videos| 日韩aaaaaa| 亚洲一二三四在线观看| 美女网站视频色| 国产日产亚洲精品系列| 蜜桃精品成人影片| 成人教育av在线| 欧美色图校园春色| 狠狠久久亚洲欧美| 中日韩av在线播放| 日韩av电影一区| 欧美国产亚洲一区| 中文国产一区| 亚洲 自拍 另类小说综合图区| 最新国产精品| 精品久久免费观看| 午夜精品视频一区二区三区在线看| 视频一区视频二区视频三区视频四区国产 | 日韩av网址在线观看| 亚洲狼人综合网| 日韩色视频在线观看| 国产女人18毛片18精品| 理论电影国产精品| 欧美亚洲另类在线| 黄色在线免费观看网站| 久久久亚洲精选| 国产乱码在线| 国内精品久久影院| 乱馆动漫1~6集在线观看| 午夜精品视频在线| 免费成人在线电影| 欧美一级黑人aaaaaaa做受| 免费h视频在线观看| 欧美亚洲国产成人精品| 免费观看亚洲| 国产精品日韩专区| 97久久精品一区二区三区的观看方式| 国产精品网址在线| 9999在线精品视频| 99伊人久久| 一本色道久久综合亚洲精品酒店| 欧美视频1区| 四季av一区二区凹凸精品| 黄色高清视频网站| 欧美日韩中文| 国产白丝袜美女久久久久| 久久一区二区三区四区五区 | 亚洲人成啪啪网站| 成人高清网站| 欧美超级免费视 在线| 白白色在线观看| 国产99在线|中文| 在线日韩三级| 国产视频不卡| 欧美少妇性xxxx| 91精品国产毛片武则天| 一本色道久久| 91人人澡人人爽人人精品| 紧缚捆绑精品一区二区| youjizz.com国产| 久久精品欧美日韩| 亚洲色图综合区| 天涯成人国产亚洲精品一区av| 波多野结衣视频在线观看| 欧美一级日韩免费不卡| 五月婷婷六月激情| 日日噜噜噜夜夜爽亚洲精品| 国产偷倩在线播放| 国产精品对白刺激| 亚洲精选av| 视频一区二区综合| 亚洲国产精品一区制服丝袜| wwwwww.色| 成人精品鲁一区一区二区| 一级片黄色录像| 亚洲www啪成人一区二区麻豆| 国产99免费视频| 精品国产凹凸成av人网站| 国产二区在线播放| 久久久免费高清电视剧观看| 成人在线免费电影网站| 国产日韩欧美精品| 亚洲精品午夜av福利久久蜜桃| 六月激情综合网| 国产成人午夜视频| 超碰人人干人人| 欧美日韩另类字幕中文| 午夜诱惑痒痒网| 美女精品一区最新中文字幕一区二区三区 | 美女网站视频黄色| 99久久精品免费看| 日韩在线视频网址| 在线观看一区二区精品视频| 亚洲精品一区二区三区新线路| 一区二区成人精品| 2021中文字幕在线| 91高跟黑色丝袜呻吟在线观看| 国产一区网站| 中文字幕无码精品亚洲35| 国产精品一级片| 亚洲一二三在线观看| 欧洲视频一区二区| 欧美巨乳在线| 91精品国产91久久久久| 亚洲性视频在线| 久久视频免费在线| 久久99国产精品尤物| 国产jk精品白丝av在线观看| 欧美性videos高清精品| 人妻一区二区三区| 欧美日韩国产成人| 日韩一区二区三区色| 麻豆md0077饥渴少妇| 精品在线观看视频| 一级免费黄色录像| 欧美日韩国产乱码电影| 最新av网站在线观看| 国产成人在线播放| 国产成人调教视频在线观看 | av大片免费在线观看| 亚洲第五色综合网| 免费在线国产视频| 国产精品视频在线免费观看| 好吊视频一区二区三区四区| 久久发布国产伦子伦精品| 亚洲激情图片qvod| 午夜精品久久久久久久99| 久久99久久亚洲国产| 亚洲免费一区三区| 婷婷五月综合缴情在线视频| 99精品视频在线免费观看| 日产精品久久久久| 日韩精品在线视频观看| 伊人久久视频| 欧美性bbwbbwbbwhd| 日本不卡一区二区| 999精品久久久| 日韩午夜激情免费电影| 色女人在线视频| 国产伦精品一区二区三区照片91 | 欧美一区自拍| 欧美成人一区二区在线观看| 久久久久久久性| 久久久久久av无码免费看大片| 色av吧综合网| 精品网站999| 国产av麻豆mag剧集| 91天堂素人约啪| 波多野结衣视频观看| www国产精品视频| 亚洲日本va午夜在线电影| 成人免费观看cn| 国产亚洲美州欧州综合国| 亚洲网站在线免费观看| 欧美第一黄色网| 视频一区在线观看| 午夜福利123| 亚洲成av人片一区二区| 免费毛片在线| 亚洲xxx大片| 日韩影院精彩在线| 中文字幕网站在线观看| 精品久久不卡| 日韩美女主播视频| 欧美日韩国产高清电影| 又黄又爽又色的视频| 狠狠操狠狠色综合网| 免费网站免费进入在线| 国产青春久久久国产毛片| 日韩av一区二| 久久久精品99| 伊人伊成久久人综合网站| 涩涩屋成人免费视频软件| 日韩中文字幕二区| 亚洲激情图片一区| 风间由美一区| 国产乱码精品一区二区三区卡| 男女男精品视频网| 日本在线观看视频网站| 色av吧综合网| 九九久久婷婷|