Ajax改造:使用Ajax和jQuery改进现有站点(6)
来源:PHP100 发布时间:2010-04-02 12:50:00
一些 querystring 值:
KeepThis=true 和 TB_iframe=true:这些值告诉 ThickBox 在一个经过 iframe 处理的 lightbox 中呈现此链接。
height=400:ThickBox 窗口的高度,以像素为单位。可以是任何值,本例中设置为 400。
width=600:ThickBox 的宽度,以像素为单位。可以是任何值,本例中设置为 600。
由 于您已经使用 querystring 将产品代码传递到 Product Details 页面,所以只需使用 ampersands (&) 将您的 ThickBox 值附加到现有 URL 上。将这些属性添加到 Product Details 链接之后,每个弹出链接应该与清单 3 类似。
清单 3. ThickBox 链接的 HTML 代码
<ahref="detail.html?product=A&KeepThis=true&TB_iframe=true&height=400&width=600"class="thickbox">product details</a>
现在已经解决了 Product Details 页的问题,接下来改进 Comparison 页。到达此页的惟一途径是通过表单提交;用户必须使用复选框选择需要比较的产品。只能使用 jQuery Forms 呈现该表单提交的结果,jQuery Forms 是一个库,它将一些方便的方法和事件挂钩(hook)封装到 ajaxForm 对象中。使用 ajaxForm 和少量的定制 JavaScript 代码,您就可以直接调用 ThickBox 的 tb_show 方法。为此,将清单 4 中的脚本片段添加到 results.html 的头部。
清单 4. 从一个表单调用 ThickBox 的 JavaScript 代码
<script type="text/javascript">
/*create a thickbox for our form submittal*/
//when the document is ready
$(document).ready(function() {
//wrap form#comparison in an ajaxForm object
$('#comparison').ajaxForm({
//intercept the submit event with a callback
beforeSubmit: function(formData, jqForm, options) {
//serialize form data; append to the form action; tack on ThickBox params
var URL = jqForm[0].action + "?" + $.param(formData);
URL += "&KeepThis=true&TB_iframe=true&height=400&width=600";
//call ThickBox directly
var caption = null;
var imageGroup = false
tb_show(caption,URL,imageGroup);
//cancel the form submission by returning false
return false;
}
});
});
</script>
这段代码展示了 jQuery API 的简单性。通过少量代码,您就截取了一个 HTML 表单的正常提交,并执行了一些定制 JavaScript 代码。使用这种技术,您可以在允许提交表单之前执行定制验证逻辑,或者在表单提交之后触发一个定制事件。在本例中,您需要避免提交表单。相反,我们将手动 “伪造” 表单提交生成的 HTTP 请求,以便将表单的目标定向到 ThickBox 窗口。
用户并不知道所有这些后台操作。他们只知道在提交表单之后,将在模式窗口中看到结果。查看 Comparison 页面之后,用户可以关闭 ThickBox 窗口,然后返回来定制和购买产品。
使 用 ThickBox 呈现 Product Details 和 Comparison 页面的惟一问题是,对于 ThickBox 窗口来说页面太大了。您可以更改传递给 ThickBox 的页面宽度和高度值,但是如果用户使用较小的视区又该怎么办?您不想让 ThickBox 覆盖整个窗口,更不想让它延伸到视区以外。您只需将 inline 的 class 添加到它们的主体标记,重新设置 details.html 和 comparison.html 的样式。然后,将清单 5 中的 CSS 声明添加到 customizemenow.css。
清单 5. ThickBox 的 CSS
#CMN #main.inline { width: 600px;}
模式窗口实现过程的最后一步是,限制 Product Details 和 Comparison 页面中不希望与用户交互的元素。由于这些页面现在只是为了提供信息,所以无需包含操作链接和按钮。也无需显示您的导航栏或其他 chrome。
可 以通过几种方式实现此目的。可以从页面删除这些元素,但是这不符合您的渐进增强策略。不支持 JavaScript 的用户转到这些页面之后无法退出或继续购买流程。您也可以将 querystring 参数附加到您的链接,让服务器端框架使用不同的模板呈现这些页面。在实际中,您很可能会这么做。但是此处还有另一种有效方式,这种方式只依赖客户端代码: 老式的 <noscript> 标记。如果将每个元素都包装到一个 <noscript> 标记中,那么只有非 JavaScript 的用户代理能看见它:这些用户正是您所希望 的。
页眉和页脚的结果 HTML 代码与清单 6 中的代码类似。


猜你喜欢
- 1.导入模块tkinter:ttk覆盖tkinter部分对象,ttk对tkinter进行了优化copy:深拷贝时需要用到copy模块tkin
- 如下所示:import pandas as pddf = pd.DataFrame({'性别' : ['男'
- 实验室新装了keras,发现keras默认后端是tensorflow,想换回theano,看了官方文档也没搞懂,最终搞定,很简单。中文文档的
- linux系统使用python获取cpu信息脚本分享#!/usr/bin/env Pythonfrom __future__ import
- 前言在尝试将结构体序列化为 Json 时,你可能会遇到 “omitempty” 标记,本小记就来浅看
- 一、实战场景Flask 框架实现用户的注册,登录和登出。二、主要知识点flask_login 插件使用SQLAlchemy 基础操作用户基础
- pygame如何捕捉鼠标的活动初始化参数import pygame, sysfrom pygame.locals import *def p
- 利用js实现点击一张图片,直接上传到指定的action,方法简单,一看就会了,只需要用户点击图片一次就可以实现图片上传功能。主要用到了onc
- 目录一、运行效果二、实现方法1. 爬虫部分2.Tkinter部分三、打包四、代码获取今天咱们用Python爬虫和Tkinter界面来做一个翻
- 本文定位:已将CPU历史数据存盘,等待可视化进行分析,可暂时没有思路。前面一篇文章(https://www.jb51.net/article
- oracle远程连接数据库,需要配置本地服务,具体步骤如下:1.2.添加新的服务3.输入服务名(例如:orcl3即服务器数据库名)4.选择T
- Cookies的处理作用保存客户端的相关状态在爬虫中如果遇到了cookie的反爬如何处理?手动处理 在抓
- 原文:Five quick JavaScript tips真是五个很quick的小提示:1.只在<form>元素上使用submi
- 装饰器作用decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式。这种模式有什么特别之处? 有兴趣可以看看Py
- 一. XSL入门1.XSL---XML的样式表 HTML网页使用预先确定的标识(tags),这就是说所有的标记都有明确的含义,例如<p
- InstrRev描述:返回某字符串在另一个字符串中出现的从结尾计起的位置。语法:InstrRev(string1, string2
- 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例
- 一、定时器概述window对象提供了两个方法来实现定时器的效果,分别是window.setTimeout()和window.setInter
- 多标签分类器多标签分类任务与多分类任务有所不同,多分类任务是将一个实例分到某个类别中,多标签分类任务是将某个实例分到多个类别中。多标签分类任
- 在mysql的手册中已经对max_user_connections有一点说明,它是用来限制用户资源的,怎么限制用户资源呢?这里做了个小测试。