function getUrlParameter(name) {
/// <summary>获得URL的指字参数</summary>
/// <param name="name" type="String">参数名</param>
var url = location.href;
var index = url.indexOf("?");
var result = "null";
if (index > 0) {
var items = url.substring(index + 1).match(new RegExp("[^&]+", "g"));
for (var j = 0; j < items.length; j++) {
if (new RegExp(name + "=", "g").test(items[j])) {
result = items[j].replace(new RegExp(name + "=", "g"), "");
}
}
}
return result;
}
function getCookies(name, sub_name) {
/// <summary>获得cookie集合值[健值对]</summary>
/// <param name="name" type="String">cookie名称</param>
/// <param name="sub_name" type="String">找到cookie集合值中sub_name健的值</param>
var result;
var reg = /[^;]+/ig;
var itmes = document.cookie.match(new RegExp("[^;]+", "ig"));
for (var i = 0; i < itmes.length; i++) {
var cookie_name = itmes[i].substring(0, itmes[i].indexOf("="));
cookie_name = cookie_name.replace(/ /g, "");
if (cookie_name == name) {
var subItmes = itmes[i].substring(itmes[i].indexOf("=") + 1).match(new RegExp("[^&]+", "g"));
for (var j = 0; j < subItmes.length; j++) {
if (new RegExp(sub_name + "=", "g").test(subItmes[j])) {
result = subItmes[j].replace(new RegExp(sub_name + "=", "g"), "");
}
}
}
}
return result;
}
function createValidateString(data) {
/// <summary>制作中文验证码</summary>
/// <param name="data" type="json">{id,name}id要显示的元素标签,name验证码存放在cookie里的名称</param>
var strings = ['五福临门', '福如东海', '步步高升', '岁岁平安', '辞旧迎新', '心想事成', '事事顺心', '年年平安', '十全十美', '事业有成', '蒸蒸日上', '四季发财', '扬帆远航', '一生平安', '身体健康', '马到成功', '九九九', '恭喜发财', '财源滚滚', '招财进宝', '财源广进'];
var index = parseInt(Math.random() * 20);
document.getElementById(data.id).innerHTML = strings[index];
setCookie(data.name, strings[index]);
}
function checkBoxSelect() {
/// <summary>CheckBox实现全选操作</summary>
var items = document.getElementsByTagName("input"); if (items.length > 0) {
for (var i = 0; i < items.length; i++) {
if (items[i].type == "checkbox") {
if (items[i].checked == true) {
items[i].checked = false;
} else {
items[i].checked = true;
}
}
}
}
}
function btnUrl(name, url) {
/// <summary>按钮跳转到指定的路径</summary>
/// <param name="name" type="String">参数名</param>
/// <param name="url" type="String">指定的路径</param>
var val = getUrlParameter(name); location = url + "?" + name + "=" + val;
}
解决方案 »
- 帮忙给调试一下js,另求教调试工具和方法,书籍!
- 怎样移除ext里formpanel里的Field或items
- msxml.domdocument.save路径怎么写
- 怎么改变控件的type
- 【急】不同分辨率下 js修正同一点坐标。
- JS菜菜问题,就是很搞笑。有高手闲着吗?来看看。。(50分!!)
- 请问如何求出一个unicode字符的二进制值
- 如何在字符串中search某些特殊字符,如"["."{"等,先言谢了。
- 谁能解决这个问题,现金300元感谢,绝不食言
- webrtc 回音消除
- window.location.href 报脚本错误
- 早前写的JS选择Class 的函数,不足之处,请高手见谅!
2 获取参数(QueryString)的方法如果叫 queryString 是不是更爽?此外,试试使用 split 来处理
3 客户端的验证码不可靠的,只能防住乖乖而可怜的用户,而验证码的作用在于防护恶意的自动程序的处理;由此可见,这客户端的验证码不但没起到作用,反而还妨碍了使用
4 checkBoxSelect 循环里的判断有点多余
5 btnUrl 方法容易导致参数丢失(如果以前有5个参数,跳转后只剩一个了)
验证码的值是存诸是cookie里的,如果客户端禁止了cookie也不打紧
后台有
if(Request.Cookies["vali"]!=null))
{
//登录代码
}else
{
Response.Write("<script>alert('验证码异常无法登录,请将本浏览器设置成默认设置后再进行登录操作。谢谢!')</script>");
}
if(Request.Cookies["vali"]!=null))
{
//登录代码
}else
{
Response.Write("<script>alert('验证码异常无法登录,请将本浏览器设置成默认设置后再进行登录操作。谢谢!')</script>");
}也就是说你只判断这个cookie是否存在,只要不为空即可,而不管cookie的值是什么那么我完全可以用c语言写一个自动post机器,在http请求头里面加上 名称为vali的 cookie,随便给它赋值就能绕过验证了
var url = location.href;
var index = url.indexOf("?");
var result = "null";
if (index > 0) {
var items = url.substring(index + 1).match(new RegExp("[^&]+", "g"));
for...用location.search更简洁些 var result = "null";
var items = location.search.match(new RegExp("[^&]+", "g"));
for...
你就说你打算怎么用它吧?你怎么用我就怎么绕!要知道对于自动程序来说,可以随意执行你页面时的任意脚本,并可以随意修改脚本里的任何值;
更让你无法接受的是,对于自动程序我来说,我根本无视你这个客户端验证码的存在,直接给你接收页面 post 数据,你服务器就根本没地儿躲了。
if(Request.Cookies["vali"]!=null)
{
if(this.txtVali.Value!=Request.Cookies["vali"])
{
//提示错误
return;
}
//别的验证
}
Cookie 也可以在请求中随意伪造的,哈哈
之所以建议使用 queryString 是因为可以与 ASP.NET 的 Request.QueryString 属性对应,对于 ASP.NET 开发者来说,这没什么额外的歧义;
checkBoxSelect 中的判断确实多余,可作如下更改则更简洁,你说呢:items[i].checked = !(items[i].checked);
此外,楼主确实可以在 checkBoxSelect 中添加一个参数,表示根元素,表示从该元素处开始取 checkbox,以免影响整个页面中的所有 checkbox自己尝试封装库是有益的。至少可以加深对正在封装功能的理解,能强化复用代码的意识,为复用和分享代码提供来源。可以说,要成为所谓的大牛,封装代码是必由之路。
对于楼主在 33楼、34楼的回复:对 jQuery 的怀疑精神是可贵的,我偶尔还对 ASP.NET 怀疑呢——事实上,就拿 ASP.NET 来说,其本身的控件就广受诟病,由此可见已有框架并不就是优秀的。
但我想说,jQuery 是个例外:
1 jQuery 是个完全开源开放的客户端库,其优秀的模式与代码经得起全世界程序员的考验,不敢说它做到了完美,但一般人想去优化它已有的代码还是比较难的;
2 jQuery 包含的功能确有众多,此时可以选择较低版本的 jQuery 来小化库大小,并满足你的使用需求;甚至可以拿开发版的源代码自己去掉一些用不到的功能,再压缩打包。
对库底层的怀疑精神促使我们更有兴趣去探索底层的实现原理,使你去学习它,从而更好地掌握它。当你读完读懂并被这底层的原理折服之后,对这项技术的掌握程度就又高了一个层次;并且由于打消了此前的疑虑,你会更加有信心、放心地使用库
所以研究库的底层和核心是大有裨益的