黑马程序员-DOM(第八讲,添加删除附件)

需求:网页上有个超链接-添加附件,点击添加附件,下面的浏览,删除附件才会出现,否则没有必要出现。

 

把他们都封装到表格中,比较好看

<table id=fileid>

<tr>

<td><a href=javascript:void(0)  οnclick=addFile()>添加附件</a></td>

</tr>

<tr>

<td><input type=file/></td> //现在要动态生成下面的内容,所以下面的内容应该去掉

<td><a href=javascript:void(0)>删除附件</a></td>

</tr>

</table>

 

<style type=text/css>

talbe a:link,table a:visited{

color:#179ed9;  //设置当链接最近没有访问过时,和最近访问过时链接的样式

text-decoration:none;//去掉超链接的下划线

}

table a:hover{

color:#f36021;//设置当鼠标移动到链接上时,链接的样式

}

</style>

 

<script type=text/javascript>

function addFile()

{

//因为文件选取框定义在行对象中,所以只要给表格创建新的行和单元格即可。

var oTabNode=document.getElementById(fileid);

var oTrNode=oTabNode.insertRow();

var oTdNode_file=oTrNode.insertCell();

var oTdNode_del=oTrNode.insertCell();

oTdNode_file.innerHTML=<input type=file/>;

oTdNode_del.innerHTML=<a href=javascript:void(0) οnclick=deleteFile(this)>删除附件;

 

}

function deleteFile(node)

{

var oTrNode=node.parentNode.parentNode;

oTrNode.parentNode.removeChild(oTrNode);

}

</script>

 

 

二、表单校验

思想:当表单失去焦点时,立即校验。(onblur事件就是失去焦点事件)

<form>

用户名:<input type=text name=user οnblur=checkUser()/>

<span id=userspan></span>

</br>

输入密码:<input type=text name=psw/></br>

</form>

 

<script type=text/javascript>

function checkUser()

{

var flag;

var oUserNode=document.getElementsByName(user)[0];

var name=oUserNode.value;

var oSpanNode=document.getElementById(userspan);

if(name=abc)

{

oSpanNode.innerHTML=用户名正确.fontcolor(green);

flag=true;

}

else

{

oSpanNode.innerHTML=用户名错误.fontcolor(red);

flag=false;

}

return flag;

}

</script>

 

三、正则表达式

定义正则表达式,必须是四个字母

var reg=new RegExp(^[a-z]{4}$,’’i);

注意还有另一种形式:/^[a-z]{4}$/i;

reg.test(name);

注意这里头尾都要加标记^$,否则将判断的是name中是否包含reg,只要包含就返回true,否则返回false。(这显然不是我们想要的结果)

 

 

四、提交表单

如果我们直接用<from>中的提交

<form>

<input type=submit value=提交数据/>

</form>

 

如果直接用这个来提交的话,我们设置的正则表达式的验证就失去意义了,因为不管填写的符不符合规范,都会向服务器提交。

 

可以做一下改进:

<form οnsubmit=return checkForm()>//注意这里,return的如果是true,提交就能使用,如果返回的是false.提交就不能使用。

<input type=submit value=提交数据/>

</form>

 

<script type=text/javascript>

function checkForm()

{

if(checkUser())

{

return true;

}

return false;

}

</script>

 

当然我们可以自己定义按钮,用自定义的按钮来提交表单,注意这种提交方式,必须首先获得<form>标签,然后用<form>标签中的submit()来提交。

不必写在<form>里面

<input type=buttonvalue=我的提交 οnclick=mySubmit()/>

 

function mySubmit()

{

//假如formiduserinfo

var oFormNode=document.getElementById(userinfo);

oFormNode.submit();

}

 

 

 

小结:

发现很多框的校验除了几个内容不同外,校验的过程是一样的,所以进行了代码的提取。

function check(name,reg,sapnId,okinfo,errinfo)

{

var flag;

var val=document.getElementByName(name)[0].value;

var oSpanNode=document.getElementById(spanId);

if(reg.test(val))

{

oSpanNode innerHTML=okinfo.fontcolor(green);

flag=true;

}

else

{

oSpanNode.innerHTML=errinfo.fontcolor(red);

flag=false;

}

return flag;

}

 

 

function checkUser()

{

var reg=/^[a-z]{4}$/i;

//Check(user,reg,userspan,用户名正确用户名错误);

//改成这种形式,后面有用

return  Check(user,reg,userspan,用户名正确用户名错误);

 

}

 

function checkForm()

{

if(checkUser()&&checkPsw()&&checkRepsw()&&checkMail())/注意这行代码的处理,(防止出现这么一种情况,当用户输入用户名,密码,确认密码,邮件地址,都正确,正准备提交时,无意间修改了密码输入框中的内容,如果,不这么写,发生这种情况时,也能提交,这就会发生错误)

{

return true;

}

return false;

}

 

 


### 回答1: 要添加路由,首先需要在react-router-dom v6中导入BrowserRouter和Routes组件。然后在Routes组件中添加Route组件,并指定path和component属性,用于指定路由路径和对应的组件。例如: ``` import { BrowserRouter, Routes, Route } from 'react-router-dom'; import Home from './components/Home'; import About from './components/About'; function App() { return ( <BrowserRouter> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> </Routes> </BrowserRouter> ); } ``` 在上面的示例中,当用户访问根路径时,会渲染Home组件,当访问/about路径时,会渲染About组件。需要注意的是,在v6中,使用element属性来指定要渲染的组件。 ### 回答2: 在使用React的项目中添加React Router Dom V6的路由非常简单。首先,确保项目中已经安装了React和React Router Dom V6的依赖。 然后,在项目的入口文件中,导入`BrowserRouter`组件,并在`ReactDOM.render`方法中将根组件包装在`<BrowserRouter></BrowserRouter>`标签中。 接下来,在根组件中,导入`Routes`和`Route`组件,分别用于定义路由规则和具体的路由路径。 使用`Routes`组件,可以在其内部使用多个`Route`组件来定义不同的路由。每个`Route`都包含两个属性:`path`和`element`。`path`表示路由的路径,`element`表示对应的组件。 通过这种方式,可以轻松地添加不同路径的路由。例如,可以创建一个`Home`组件,并在路由中添加`path="/" element={<Home />}`。这样,当用户访问根路径时,将加载`Home`组件。 除了基本的路径匹配,React Router Dom V6还引入了`<Switch>`组件用于路由的排他性匹配。在`Switch`组件内部,可以使用`<Route>`组件来定义不同的路由。当匹配到第一个路由后,就不会继续匹配后面的路由。 此外,React Router Dom V6还提供了一些其他的组件和钩子,如`<Link>`组件用于创建链接,`useNavigate`钩子用于进行编程方式的导航等。 总结起来,通过使用React Router Dom V6的`<Routes>`和`<Route>`组件,可以轻松地添加路由路径和对应的组件。并且,通过`<Switch>`组件可以实现路由的排他性匹配。在需要进行导航操作时,可以使用`<Link>`组件或`useNavigate`钩子。 ### 回答3: 在 React 中使用 react-router-dom v6 添加路由非常简单。以下是一个简单的演示: 首先,确保已经安装了 react-router-dom v6: ```shell npm install react-router-dom@next ``` 然后,在你的 App.js(或其他根组件)中导入所需的库和组件: ```jsx import React from 'react'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import Home from './Home'; import About from './About'; import NotFound from './NotFound'; const App = () => { return ( <Router> <Routes> <Route path="/" element={<Home />} /> <Route path="/about" element={<About />} /> <Route path="*" element={<NotFound />} /> </Routes> </Router> ); }; export default App; ``` 这里我们使用了 `<BrowserRouter>` 组件来为应用程序提供路由功能,然后使用 `<Routes>` 和 `<Route>` 组件来设置路由规则。 在 `<Routes>` 中,我们可以使用 `<Route>` 组件来定义具体的路由路径和对应的组件。`<Route>` 组件的 `path` 属性用于定义路由路径,`element` 属性用于指定该路径对应的组件。 在上面的例子中,我们将根路径 `/` 对应的组件设置为 `Home` 组件,路径 `/about` 对应的组件设置为 `About` 组件,而路径 `*` 对应的组件设置为 `NotFound` 组件(即未匹配到任何路由时显示的组件)。 当我们访问应用程序的不同路径时,react-router-dom v6 会根据路径自动加载相应的组件进行渲染。 希望这个简单的例子能够帮助你理解如何使用 react-router-dom v6 添加路由。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值