ant21 on Aug 22nd, 2009用 Ajax 方式实现 Django Comments 提交
Django 自带的 Comments 模块还蛮好用的,但是提交的时候貌似有点麻烦,虽然可以手动去掉那个预览的按钮,只留下提交按钮,但还是想用户体验更好一些,用 Ajax 的方式来改进评论的提交。
想要的效果很简单,用户写完评论,点击提交按钮,这时候出现 loading 图标,显示正在提交,提交成功后,用 YFT 的方式把刚才的评论加到评论列表最后,同时评论数加一,loading 图标消失。当然,需要用到我最喜欢的 jQuery 和她的伙伴 Effect.Highlight。
在我的页面中,需要对每一个产品作评论,于是在 product_detail.html 的头部,加上如下代码:
123456789101112131415161718192021222324252627282930313233343536373839404142434445<script type="text/javascript" charset="utf-8">
function bindComment() {
$(’#comments form’).submit(function() {
$(’input[type=submit]‘).attr(’disabled’, ‘disabled’);
$.ajax({
type: "POST",
[...]
ant21 on Jun 18th, 2009Greasemonkey 技巧
Greasemonkey 会把对象包裹起来返回 XPCNativeWrapper,写 JS 的时候需要留心。下面这些要点来自 Greasemonkey Hacks。
1. 调用函数
12345//工作
window.setTimeout(my_func, 1000)
//不工作
window.setTimeout("my_func()", 1000)
2. 事件处理
12345678910//工作
var elmLink = document.getElementById(’somelink’);
elmLink.addEventListener("click", my_func, true);
//不工作
var elmLink = document.getElementById(’somelink’);
elmLink.onclick = my_func;
var elmLink = document.getElementById(’somelink’);
elmLink.onclick = ‘my_func(this)’;
3. 命名表单和表单元素
1234<!–假如有表单–>
<form id="gs">
<input name="q" type="text" value="foo" />
</form>
1234567//工作
var form = document.forms.namedItem("gs");
var input = form.elements.namedItem("q");
var q = input.value;
//不工作
var q = document.gs.q.value;
4. 自定义属性
1234567//工作
var elmFoo = document.getElementById(’foo’);
elmFoo.setAttribute(’myProperty’, ‘bar’);
//不工作
var elmFoo = document.getElementById(’foo’);
elmFoo.myProperty [...]
ant21 on May 3rd, 2009diggfoto hack
diggfoto 上的图片还蛮不错的,但是要一张一张去点确实有点不人道(总在期望下一张更精彩?),下面的程序可以帮忙把它的图片都下回来,事先最好准备一个 diggfoto 文件夹,嘿嘿。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#! /usr/bin/env python
#coding=utf-8
import os
import sys
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
def download(url=’http://diggfoto.com/’):
try:
r = urllib2.urlopen(url)
page = r.read()
soup = BeautifulSoup(page)
entry = soup.find(’div’, ‘entry’)
a = entry.find(’a')
[...]