2011年12月26日

闭包和等式笔记

  1、JavaScript 中的闭包:

<script language="javascript">
window.name = "the window object!";
function windowfun() {
alert(this.name);
}
windowfun();// -> "the window object!"


var notwindowfun = {
name: "the notwindow object!",
fun : function() { return this.name; }
};
alert(notwindowfun.fun());// -> "the notwindow object!"

var testobj = notwindowfun.fun();
alert(testobj);// -> "the notwindow object!"

var testobj = notwindowfun.fun;
alert(testobj());// -> "the window object!"
</script>

  2、在 JavaScript 里:

'5' + 3 结果是 '53'
'5' - 3 结果是 2

  3、在 JavaScript 里,下面的语法结构

  return
  {
  id : 1234,
  title : 'Tony the Pony'
  };

  会提示语法错误:”缺少分号”。而下面的写法却能按你预想的结果运行:

  return {
  id : 1234,
  title : 'Tony the Pony'
  };

  更让人郁闷的是下面的写法竟然可以(至少在谷歌浏览器里是这样的):

  return /*
  
*/{
  id : 1234,
  title : 'Tony the Pony'
  };

  下面的例子也是同样的问题引起的,但不会报错,而你却得不到想要的结果:

return
2 + 2;

  4、JavaScript 的等式对照表:

  ''        ==   '0'           // false

  0 == '' // true

  0 == '0' // true

  false == 'false' // false

  false == '0' // true

  false == undefined // false

  false == null // false

  null == undefined // true

  " \t\r\n" == 0 // true

posted @ 2011-12-26 21:14 卖身葬小强 阅读(15) 评论(0) 编辑

2011年8月30日

小米手机工程纪念版秒杀活动,感恩价:1699RMB

参与方式:
先登录,登录后请耐心等待。
秒杀时间一到,无需刷新页面,按钮会自动由灰色变成红色。当看到“立即秒杀”的红色按钮,点击按钮,输入验证码,系统就会告诉你是否秒杀成功。
如果秒杀成功,会进入下单支付流程,需要填写收货人姓名、地址、电话等相关信息,同时要在30分钟内完成在线支付。
没有在30分钟内完成支付的,系统会自动把秒杀名额释放出来,继续供大家秒杀。
重要提示:
1. 参加活动,请先登录。登录成功后,系统会自动判断你的积分是否符合要求。
2. 为防止作弊,给大家一个公平的机会,秒杀的时候需要输入验证码。
3. 本次活动只支持在线支付,网银和支付宝均可。请大家提前往支付宝充值,或者查看网银的支付额度。
4. 为应对黄牛党,秒杀成功后,请在30分钟内完成付款,否则视为自动放弃机会。
5. 目前只支持中国(港澳台除外)发货,不支持国外配送。
小米工程机的荣誉与优惠:
1. 限量生产,有唯一纪念珍藏编码,载入小米企业史。
2. 购买成功的米粉,将获得论坛终身荣誉会员勋章一枚。
3. 工程机与量产机同品质,享受国家三包售后服务,同时在量产机上市前(具体日期见官网)出现硬件质量问题可免费退换货。
4. 免费赠送SanDisk闪迪4G 手机专用闪存卡、小米手机专用耳机和精美手机彩壳各一个。
5. 全场免运费,当天下单次日配送。
6. 小米工程机不作正式销售,本次支付的费用为量产机的预定金,暂不开具发票。在量产机上市前(具体日期见官网),你可以选择:

A 用工程机申请免费换一台全新的量产机,用户只需承担工程机寄回的运费。但不再拥有小米终身荣誉会员的勋章。
B 继续保留工程机,根据用户实际支付的费用开具发票。

注:
200名现场预定米粉和74名荣誉开发组米粉,无需参与秒杀,直接在线下单,30分钟内完成支付即可,否则视为自动放弃机会。

小米服务热线:400-100-5678(仅收市话费)
小米公司保留本次活动的最终解释权

斗胆发上首页,只是为了让更多人知道这个活动,我知道这个不符合首页的要求,所以如果被移出首页,我也无怨无悔.

PS:偶并不是小米的水军,我也是刚刚才看到的,要不我不会现在才发.

posted @ 2011-08-30 23:17 卖身葬小强 阅读(702) 评论(0) 编辑

2011年8月21日

ecshop二次开发--购物时为每件商品添加备注信息

目标:

  1. 用户在选购商品加入购物车前可以为商品添加备注信息
  2. 加入购物车后可以在购物车查看备注信息
  3. 店主在查看订单时可以看到用户为商品添加的备注信息
  4. 用户在个人中心中可以看到商品的备注信息

目标一:

  打开ecshop/goods.php,搜索"display"可以看到这句:

$smarty->display('goods.dwt',      $cache_id);

  

  打开模板目录下的goods.dwt,搜索"<!-- {* 结束循环可选属性 *} -->",在这句之前添加:

<br />商品备注:<textarea name="content" cols="40" rows="5"></textarea>

  

  打开ecshop数据库执行:

ALTER TABLE `ecs_cart` ADD `content` TEXT NOT NULL

  

  在下面我们可以看到a连接执行的是:javascript:addToCart({$goods.goods_id}),于是我们在文件夹里查找addToCart方法,在js/common.js里面的addToCart方法我们可以看到表单的值都是在这里获取的,于是我们找到goods.quick    = quick;在它前面加上:

goods.content= formBuy.elements['content'].value;

  

在方法的最后一看可以看到递交的地址是:flow.php?step=add_to_cart.

  打开flow.php,查找add_to_cart方法,找到if (addto_cart($goods->goods_id, $goods->number, $goods->spec, $goods->parent)),将它替换为:

if (addto_cart($goods->goods_id, $goods->number, $goods->spec, $goods->parent,$goods->content))

  

  找到addto_cart方法,在includes/lib_order.php里面,将function addto_cart($goods_id, $num = 1, $spec = array(), $parent = 0)替换为:

function addto_cart($goods_id, $num = 1, $spec = array(), $parent = 0, $content='')

  找到$parent['parent_id']    = 0;在它下面加入:

$parent['content']    = $content;

  

这时候我们回到商品页检查一下是否能运行,填写留言,加入购物车,查看数据库我们可以发现已经成功插入数据库了.

但是我们回到商品页重新填写备注信息再加入购物车发现,数据库的备注信息还是原来的,没有更新.

于是我们找到" , goods_price = '$goods_price'". ,将它替换为:

" , goods_price = '$goods_price', content='$content'".

再回到商品页测试,成功更新数据库!我们将商品删除,数据库的记录也消失了!

目标二:

  找到模板目录下的flow.dwt,搜索<td bgcolor="#ffffff">{$goods.goods_attr|nl2br}</td>,将它替换为:

              <td bgcolor="#ffffff">
              	{$goods.goods_attr|nl2br}
              	<br />
                <!--{if $goods.content}-->
                	备注信息:{$goods.content}
                <!--{/if}-->
              </td>

  回到购物车页面刷新,我们发现备注信息已经显示出来了!

目标三:

  进入数据库执行:

ALTER TABLE `ecs_order_goods` ADD `content` TEXT NOT NULL 

  

  由checkout页面的提交按钮<input type="hidden" name="step" value="done" />可以知道它的提交动作为done.

  在flow.php搜索done,往下找到"/* 插入订单商品 */",修改$sql为:

    $sql = "INSERT INTO " . $ecs->table('order_goods') . "( " .
                "order_id, goods_id, goods_name, content, goods_sn, product_id, goods_number, market_price, ".
                "goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id) ".
            " SELECT '$new_order_id', goods_id, goods_name, content, goods_sn, product_id, goods_number, market_price, ".
                "goods_price, goods_attr, is_real, extension_code, parent_id, is_gift, goods_attr_id".
            " FROM " .$ecs->table('cart') .
            " WHERE session_id = '".SESS_ID."' AND rec_type = '$flow_type'";

  

插入订单动作完成!

  在admin文件夹下找到order.php,在$_REQUEST['act'] == 'info'里的$smarty->display('order_info.htm');可以知道输出的模板为order_info.htm,

打开order_info.htm,找到<td>{$goods.goods_attr|nl2br}</td>,替换为:

    <td>
    	{$goods.goods_attr|nl2br}
        <br />
        <!--{if $goods.content}-->
            备注信息:{$goods.content}
        <!--{/if}-->
    </td>

  

后台订单查看部分完成!

目标四:

参考目标二自行完成~

posted @ 2011-08-21 18:54 卖身葬小强 阅读(308) 评论(0) 编辑

2011年8月19日

完美解决IE6,IE7兼容性问题の必杀技

<!--[if lte IE 7]>
<div style='border: 1px solid #F7941D; background: #FEEFDA; text-align: center; clear: both; height: 75px; position: relative; z-index:5000' id="forie6"> 
    <div style='position: absolute; right: 3px; top: 3px; font-family: courier new; font-weight: bold;'>
        <a href="#" onclick="document.getElementById('forie6').style['display'] = 'none'"><img src='includes/templates/c31773/ie6/ie6nomore-cornerx.jpg' style='border: none;' alt='Close this notice'/></a>
    </div> 
    <div style='width: 740px; margin: 0 auto; text-align: left; padding: 0; overflow: hidden; color: black;'> 
        <div style='width: 75px; float: left;'><img src='includes/templates/c31773/ie6/ie6nomore-warning.jpg' alt='Warning!'/></div> 
        <div style='width: 275px; float: left; font-family: Arial, sans-serif; color:#000'> 
            <div style='font-size: 14px; font-weight: bold; margin-top: 12px; color:#000'>You are using an outdated browser</div> 
            <div style='font-size: 12px; margin-top: 6px; line-height: 12px; color:#000'>For a better experience using this site, please upgrade to a modern web browser.</div> 
        </div>
        <div style='width: 75px; float: left;'>
            <a href='http://www.firefox.com/' target='_blank'><img src='ie/ie6nomore-firefox.jpg' style='border: none;' alt='Get Firefox 3.5'/></a>
        </div>
        <div style='width: 75px; float: left;'>
            <a href='http://www.browserforthebetter.com/download.html' target='_blank'><img src='ie/ie6nomore-ie8.jpg' style='border: none;' alt='Get Internet Explorer 8'/></a>
        </div> 
        <div style='width: 73px; float: left;'>
            <a href='http://www.apple.com/safari/download/' target='_blank'><img src='ie/ie6nomore-safari.jpg' style='border: none;' alt='Get Safari 4'/></a>
        </div> 
        <div style='float: left; width: 73px;'>
            <a href='http://www.google.com/chrome' target='_blank'><img src='ie/ie6nomore-chrome.jpg' style='border: none;' alt='Get Google Chrome'/></a>
        </div>
        <div style='float: left;'>
            <a href='http://www.opera.com/' target='_blank'><img src='ie/ie6nomore-opera.jpg' style='border: none;' alt='Opera'/></a>
        </div> 
    </div>
</div>
<![endif]-->

  


上图:

      

这种东西叫"条件注释":IE条件注释是一种特殊的HTML注释,这种注释只有IE5.0及以上版本才能理解。

除了“Windows上的IE”之外的所有浏览器都会认为条件注释只是一段普通的HTML注释。你不能在CSS代码中使用条件注释。条件注释就是一些if判断,但这些判断不是在脚本里执行的,而是直接在html代码里执行的。

  1. 条件注释的基本结构和HTML的注释(<!– –>)是一样的。因此IE以外的浏览器将会把它们看作是普通的注释而完全忽略它们。
  2. IE将会根据if条件来判断是否如解析普通的页面内容一样解析条件注释里的内容。
  3. 条件注释使用的是HTML的注释结构,因此他们只能使用在HTML文件里,而不能在CSS文件中使用。


通过“比较操作符”可以更灵活地对IE版本进行控制,用法是在IE前面加上“比较操作符”。合法的操作符如下:



  示例:

<!–[if gt IE 5.5]>  / 如果IE版本大于5.5 /
<!–[if lte IE 6]>   / 如果IE版本小于等于6 /
<!–[if !IE]>        / 如果浏览器不是IE /

  

posted @ 2011-08-19 23:05 卖身葬小强 阅读(311) 评论(0) 编辑

2011年4月9日

PHP+Jquery制作可编辑的表格

table.php

View Code
<?php
header("Content-Type:text/html;charset=utf-8");
$mysqli=new MySQLi("localhost","root","123456","xiaoqiangdb");

if(mysqli_connect_errno){
echo "连接数据库失败".mysqli_connect_error();
exit;
}

?>

<html>
<head>
<title>可编辑表格</title>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="jquery-1.3.2.min.js"></script>
<script src="table.js"></script>
</head>
<body>

<?php

$sql="select id,name,age,sex,email from users limit 0,20";

$result=$mysqli->query($sql);

echo "<table>";
echo "<caption>可编辑表格</caption>";
echo "<tr>";
echo "<th>编号</th><th>姓名</th><th>性别</th><th>年龄</th><th>邮箱</th>";
echo "</tr>";
while($row=$result->fetch_assoc()){
echo '<tr>';
echo '<td class="id">'.$row['id']'</td>';
echo '<td>'.$row['name']'</td>';
echo '<td>'.$row['age']'</td>';
echo '<td>'.$row['sex']'</td>';
echo '<td>'.$row['email']'</td>';
echo '</tr>';
}
echo "</table>";

$mysqli->close();
?>

</body>
</html>

style.css

View Code
@charset "utf-8";
/* CSS Document */

body
{ font-size:12px; background:#EEE; text-align:center;}
table
{ width:600px; border:1px solid #050; border-collapse:collapse;}
th,td
{ border:1px solid #050; width:120px;}
th
{ background:#282; color:white;}

table.js

View Code
// JavaScript Document
$(function(){
$(
"tr:even").css("background-color","#ffff99");
$(
"tr td:not(.id)").click(function(){
if($(this).children('input').length > 0)
return;
//取出表格中原有的内容
var data=$(this).text();
//将内容设置为空
$(this).html('');

var td=$(this);

//创建一个表格
var inp=$('<input type="text">');
inp.val(data);
inp.css(
"background-color",$(this).css("background-color"));
inp.css(
"border-width","0px");
inp.css(
"width",$(this).css("width"));
//在表格中放一个input表单
inp.appendTo($(this));
//表单放入表格后触发焦点事件
inp.trigger('focus');
//全选内容
inp.trigger('select');
//添加键盘时间
inp.keydown(function(event){
switch(event.keyCode){
case 13:
td.html($(
this).val());
//利用Ajax将数据传给服务器

//获取一行所有的列对象
var tds=td.parent("tr").children("td");

var i=tds.eq(0).text();
var n=tds.eq(1).text();
var a=tds.eq(2).text();
var s=tds.eq(3).text();
var e=tds.eq(4).text();

//var user={id:i,name:n,age:a,sex:s,email:e}
$.post("save.php",{id:i,name:n,age:a,sex:s,email:e},function(data){
alert(data);
});
break;
case 27:
td.html(data);
break;

}

}).blur(
function(){
td.html($(
this).val());
//利用Ajax将数据传给服务器

//获取一行所有的列对象
var tds=td.parent("tr").children("td");

var i=tds.eq(0).text();
var n=tds.eq(1).text();
var a=tds.eq(2).text();
var s=tds.eq(3).text();
var e=tds.eq(4).text();

//var user={id:i,name:n,age:a,sex:s,email:e}
$.post("save.php",{id:i,name:n,age:a,sex:s,email:e},function(data){
alert(data);
});

});
});

});

save.php

View Code
<?php
header("Content-Type:text/html;charset=utf-8");
$mysqli=new MySQLi("localhost","root","123456","xiaoqiangdb");

if(mysqli_connect_errno){
echo "连接数据库失败".mysqli_connect_error();
exit;
}


$sql="update users set name='{$_POST["name"]}',age='{$_POST["age"]}',sex='{$_POST["sex"]}',email='{$_POST["email"]}' where id='{$_POST["id"]}'";


$result=$mysqli->query($sql);

if($result){
echo "修改成功";
}
else{
echo "保存失败";
}

$mysqli->close();

?>

posted @ 2011-04-09 22:40 卖身葬小强 阅读(335) 评论(0) 编辑

PHP的异常处理机制

<?php
//异常处理:意外,是在程序运行过程中发生的意料之外的事,使用异常改变脚本正常流程

//try{
//}catch(异常对象){
//}

//1.如果try中代码没问题,则执行完try中代码后就到catch后执行
//2.如果try中代码有异常发生,则抛出一个异常对象,抛出给catch中的对象,则在try中代码就不会再继续执行下去,直接跳转到catch中去执行,catch中执行完成,在继续向下执行

//注意:提示发生了什么异常,不是我们主要做的事情,需要在catch中解决这个异常,如果解决不了,则抛出给用户


class OpenFileException extends Exception{
function open(){
touch("tmp.txt");

$file=fopen("tmp.txt","r");

return $file;
}
}


class DemoException extends Exception{
function pro(){
echo "Demo异常<br>";
}
}


class MyClass{
function openfile(){
$file=@fopen("aaa.txt","r");
if(!$file)
throw new OpenFileException("文件打开失败");
}

function demo($num=0){
if($num==1)
throw new DemoException("演示异常!");
}
}


try{
$my=new MyClass();
$my->openfile();
$my->demo("1");
}
catch(OpenFileException $e){
echo $e->getMessage()."<br>";
$file=$e->open();
}
catch(DemoException $e){
echo $e->getMessage()."<br>";
$e->pro();
}
catch(Exception $e){ //接收抛出了但没有处理的所有异常
echo $e->getMessage();
}
?>

posted @ 2011-04-09 22:33 卖身葬小强 阅读(129) 评论(0) 编辑

2011年3月27日

PHP错误处理方式

摘要: 错误处理 1.语法错误 2.运行时的错误 3.逻辑错误 错误报告: 错误:E_ERROR 警告:E_WARNING 注意:E_NOTICE 建议: 开发阶段:开发是输出所有的错误报告,有利于调试程序 运行阶段:不要让程序输出任何一种错误报告<?PHP error_reporting(E_ALL); //1.指定错误报告,错误类型为全部 //ini_set("error_reporting",E_ALL); //临时改变配置文件的值 //ini_get("upload_max_filesize"); //获取配置文件的值 ini_set("阅读全文

posted @ 2011-03-27 18:52 卖身葬小强 阅读(178) 评论(0) 编辑

PHP中使用MySQL的视图

摘要: <?php $mysqli=new MySQLi("localhost","root","123456","xiaoqiangdb"); $sql="select * from myview order by chengji"; $result=$mysqli->query($sql); echo '<table align="center" border="1">'; while($row=$result->阅读全文

posted @ 2011-03-27 18:26 卖身葬小强 阅读(127) 评论(0) 编辑

使用mysqli中的预处理语句

摘要: <?php/*=========================mysqli_stmt预处理类(推荐使用)=========================*//*===============================优点:效率高,安全================================*/ $mysqli=new MySQLi("localhost","root","123456","xiaoqiangdb"); /*=================================非s阅读全文

posted @ 2011-03-27 18:14 卖身葬小强 阅读(228) 评论(0) 编辑

2011年3月26日

使用mysqli完成事务处理

摘要: <?php/*======================================事务处理======================================*///建表时要使用InnoDB(type=InnoDB) $mysqli=new MySQLi("localhost","root","","xiaoqiangdb"); //$mysqli->set_charset("utf8"); //设置字符集 $mysqli->autocommit(0); //关阅读全文

posted @ 2011-03-26 16:17 卖身葬小强 阅读(203) 评论(0) 编辑

仅列出标题  下一页

导航

统计

公告