作者nottt (无)
看板Web_Design
标题Re: [问题] js 更改按钮执行的判断结果
时间Fri Feb 24 00:25:41 2017
→ revo3512: 在google apps script建立好一个自动传值到excel的程式
→ revo3512: 在html上写上form跟input後送出,会把资料送到excel中
→ revo3512: 本来的做法是...送出後会出现 result=true
→ revo3512: 但我想改的是送出时验证栏位是否有填写,送出後直接跳转
→ revo3512: google首页~
根据推文,程式流程确定了,我们先来仔细看一下这个流程资料会怎麽跑
0.建立Google apps script的程式,将资料写入google试算表(这篇不会讨论)
1.使用者填写资料
2.验证使用者资料是否正确,如果成功才继续,失败的话就回1
验证实作方式使用jquery valid
3.资料填写正确後,
"不使用"表单传值,改用ajax的抛资料,就是$.get()那
段
4.成功传回google,收到回传讯息後,把网页跳到其他页
如果你已经开始跟着台大计中那篇验证的教学试着做,应该会有一段js长这样
$("form").submit(function () {
if (
$("form").valid()) {
/*验证成功,post the form data to server*/
}
else return false;
});
这边有一点地方要调整,因为资料是走ajax传输,所以不管是否填写成功,
都要中断form的submit,不然就会被导向action的页面,就算不填也会被导向目前页面
就会发生ajax来不及回传资料,先被form导回自己页面了
因此要把上面的if条件式改成
if (
$("form").valid()){
/*验证成功,post the form data to server*/
//因为走ajax传输,所以在等Server回传资料的时候,
//先把input按钮关掉,避免使用者手痒一直按
$(':input[type="submit"]').prop('disabled', true);
//之前写好的Send
Send();
}
return false;
很诡异没错,就是无论如何都要return false就对了XD
我有注意到你的html里面的input原本就有写了required=""
所以应该只要把valid的js一挂上去,验证机制就启动了
然後良心建议,
$("form").valid()请不要真的写$("form"),
乖乖的给form一个ID再去呼叫他,不然页面里如果有多个form就会互相干扰了
附上范例
http://codepen.io/not0000/pen/LWYboQ?editors=1010
话说也是有这篇我才知道怎麽写入google表单,我也是长知识了
话说,这样纯前端直接写入google表单,要怎麽做captcha的图形验证呢..
没有後端检查,感觉随便都会被塞一堆垃圾资料,有人知道该怎麽处理吗?
※ 引述《nottt (无)》之铭言:
: ※ 引述《revo3512 (brands)》之铭言:
: : 版上各位前辈们好:
: : http://codepen.io/anon/pen/GWKoZW (code在此)
: : 爬文说location.assign可以指定....在按完按钮後到连接到指定page, 但发现好像不是
: : 每个网站都可以显示出来(至少在codepen中,连w3c可以,连yahoo、google会空白)
: : →如果想要按下 "加入会员" 先判定表格是否有填写好,ture 直接连到google首页,
: : fause 则是停留在原本表单画面,该怎麽写呢?
: : 先谢谢大家>"<
: 有关表单的部分,不建议直接用js导向其他页面
: 表单正常的用法是在form标签里面写上要前往的後端程式网址,
: 後端程式利用http post传来的资料,接收变数後做处理(通常是写入资料库)
: form标签的用法可以参考w3c
: https://www.w3schools.com/tags/att_form_action.asp
: html第6行的<form>应该改成类似这样,在action内填写要连去的网址
: <form action="/action_page.php" method="post">
: 另外,html表单要传送的话,有一个type="submit"可以使用,
: 预设的图形是按钮,按下去就会把表单送到action的网址
: input要改成以下这种方式较好
: <input type="submit" value="加入会员">
: 你可能会发现input里面的onclick="Send()"不见了,因为不建议放那边
: 单纯在input的按钮上加onclick无法完全侦测到表单送出的事件
: 例如键盘的使用者,可以透过键盘的enter键直接触发送出表单,
: 又或是单纯用键盘的tab切换栏位,最後再用enter去按加入会员的按钮,
: 以上两者都可以回避input onclick事件
: 建议参考w3c的用法,把验证的js放在form标签上
: https://www.w3schools.com/js/js_validation.asp
: <form name="myForm" action="/action_page.php"
: onsubmit="return validateForm()" method="post">
: 至於判断表单有没有填好,如果只是要检查必填栏位或是长度什麽的,
: 不用自己写,可以直接套用老牌的jQuery Validation Plugin
: 详细内容可以参考这篇台大计中的教学
: http://www.cc.ntu.edu.tw/chinese/epaper/0033/20150620_3307.html
: 最後的最後,除了前端靠js挡以外,後端也要验证资料
: 前端验证防君子,後端验证防小人,不然很容易就被injection类的攻击打爆了
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.187.98.220
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1487867144.A.9C6.html
1F:推 revo3512: 谢谢nottt!!!!!!!!! 03/01 09:53
2F:→ revo3512: 这个也是爬文许久才发现的方式,但仅限於前端,但我想的 03/01 09:54
3F:→ revo3512: 跟你一样,这些资料全靠前端的话,只能防君子... 03/01 09:54
4F:→ revo3512: 如果真的恶意植入资讯的话,还是不太适合作为个资蒐集的 03/01 09:56
5F:→ revo3512: 方式.... 因为资讯完全裸奔在网路上T^T 03/01 09:56
6F:→ revo3512: 另外这个方式,在IE上测试好像没反应(送出後无反应) 03/01 09:56