标签归档:javascript

ie用jquery.form进行ajax提交没反应

用jquery form插件,进行ajax提交,本来可以用,好好地,突然发现,firefox,opera等可以提交,ie的success函数运行了。
花了三个钟头,反复查,发现,原来是改了处理页面的返回头信息。
加上了 application/x-javascript ,ie8就不干活了。
如果是text/html,就行,或者不指定也行。
算bug不?让我问候一下写这段代码的ie开发人员吧。

ajax的头信息,编码看来都要注意哎。

如何跳出jquery的each?

jquery再遍历选定的对象时候用each比较方便。有种应用是找到里面符合条件的对象后,要跳出这个循环。
javascript的跳出循环一般用break.
同事遇到这个问题,下意识 的用了break,想跳出这个循环。结果报错

SyntaxError: unlabeled break must be inside loop or switch

经查,应该用一个

return false;

continue是跳出当前循环,继续下一个循环。

jquery实现ajax投票一例

其实是很简单的,一个或多个页面有一堆摄影作品,用户点击投票,相应的作品数量增加1.

前台jsp部分的代码如下:

...
票数:<span id="i<%=id%>"><%=vote_number%></span><br/>
    <a onclick=myvote(<%=id%>); href='javascript:;'">投票</a>
...

js部分的代码如下

function myvote(id){
	$.post("vote.jsp", { id: id },
  function(data){
  	  eval("var data="+data);
    if (data.issucc=="0"){
    	alert(data.mess)
    }else{
    	//alert("更新页面");
    	$("#i"+data.myid).html(data.votenum);
    	}
  });
}

后台返回的json数据如下

{issucc:<%=issucc%>,mess:”<%=mess%>“,votenum:<%=votenum%>,myid:<%=myid%>}

issucc:是否成功
mess:信息,主要是错误信息,比如没登录,超过限制等
votenum:投票后的得票总数
myid:投票的id,用于更新页面的投票数。

备份一段js代码

<script language="JavaScript" src="/include/jquery-latest.pack.js"></script>
<script language=JavaScript>
var tmp="";
function formatn(n){
 if (n<10)
  return "0"+n;
 else
  return ""+n;
}
$(document).ready(function() {
 var f=document.form1.elements;
 var n_i=1;
 var s_i="";
 var n_v=1;
 for(var i=0;i<f.length;i++){
  //tmp+=f[i].value+"\n";
  if (f[i].type=="hidden"||f[i].name=="reg_no" ){
   continue;
  }
  if (f[i].type=="text"||f[i].type=="textarea"){
   f[i].name=f[i].id="text_"+formatn(n_i);
   n_i++; continue;
  }
  if (f[i].type=="radio"||f[i].type=="checkbox"){
   var oname=f[i].name;
   f[i].name=f[i].id="check_"+formatn(n_i);
   f[i].value=formatn(n_v);
   if (i<f.length){
    if (oname!=f[i+1].name||f[i].type!=f[i+1].type){
     n_i++;
     n_v=1;
    }
    else
     n_v++;
   }
    continue;
  }
 }
});
</script>

FCKEditor XML Request Error:Internal Server Error(500)

原来一直能用的ecshop后台信息发布里面的fckeditor上传功能,换了个机器后不能用了。以为是文件损坏,上传一边不行。
什么xml错误,还弹出一个大的JavaScript alert警告框,内容就是服务器端错误的500内容
网上搜,又说是配置问题,主题问题,想想都不应该,直接请求
filemanager/connectors/php/connector.php
出了服务器的500错误,html文件能访问,txt也行。
后来从根目录开始查,发现到fckeditor目录里面的php文件开始不能访问。
改了fckeditor目录的属性为755,问题解决。

jQuery 的图片幻灯片插件imgslideshow

有一个wp-magazine的theme,用了一个prototype的glider插件。但是偶不会用prototype,会一点jquery,并且用jquery的应用越来越多,比如使用的相册就是用的jquery,想统一一下JavaScript的类库。所以一直想找一个jquery类似效果的插件。除了这个之外,又发现一个不错的,有点像taobao首页广告的链接。
代码也很简单,一段简单的css,一个jquery+一个js就行了。
demo请点击这里,我稍微做了修改,原来是要点击数字,变化,现在鼠标移动到上边就可以变化图片了。

jquery的find的filter的区别

filter will select a certain subset (zero or more) of the already
selected elements.
jquery的filter将在一组已经选取的元素里面选择
find will select a set of (zero or more) elements that are descendants
of the already selected elements.
jquery的find将在一组已经选取的元素的子节点里面选择

Here is an example:
示例如下

<div class="peanuts"> 
        <p class="elephants"></p> 
</div> 
<div class="elephants"> 
        <p></p> 
</div> 

$(‘div’).filter(‘.elephants’); // <-- selects the second div, because it has class="elephants" $('div').find('.elephants'); // <-- selects the first paragraph, because it has class="elephants" * Note that these two examples are very simple and would probably be better written as ... $('div.elephants'); ... and ... $('div .elephants');

javascript把数字格式化转换成货币类型

做财务的东西总是比较有挑战的,性能,易用性,准确性都有很高要求,包括一些小的细节。
比如金额需要显示的时候转换成有千分位,小数点后保留2位等。去编辑的时候,又要格式化,把逗号都去掉。网上找了段代码,但是再次编辑会有问题,修改了一下,代码如下:

  
function outputMoney(number) {
 number=number.replace(/\,/g,"");
 if (isNaN(number)||number=="") return "";
 number = Math.round(  number*100) /100;
 if(number<0)
 return '-'+outputDollars(Math.floor(Math.abs(number)-0) + '') + outputCents(Math.abs(number) - 0);
 else
 return outputDollars(Math.floor(number-0) + '') + outputCents(number - 0);
}
function outputDollars(number)
{
  if (number.length<= 3)
  return (number == '' ? '0' : number);
  else
  {
    var mod = number.length%3;
    var output = (mod == 0 ? '' : (number.substring(0,mod)));
    for (i=0 ; i< Math.floor(number.length/3) ; i++)
    {
      if ((mod ==0) && (i ==0))
      output+= number.substring(mod+3*i,mod+3*i+3);
      else
      output+= ',' + number.substring(mod+3*i,mod+3*i+3);
    }
    return (output);
  }
}
function outputCents(amount)
{
  amount = Math.round( ( (amount) - Math.floor(amount) ) *100);
  return (amount<10 ? '.0' + amount : '.' + amount);
}

用法:

<input name="TRANS_AMOUNT" type="text" id="TRANS_AMOUNT" size="15" onblur="this.value=outputMoney(this.value);" />

2009-04-28 更新

jquery货币数值排序

jquery是个好东西,现在有很多基于它的plugin,tablesorter 就是一个。
上面有好多例子,就不转贴了。最近做了一个小东西,用到了它。
因为是财务的东西,金额用到了千分位,就是每多三位,加一个逗号。原来用都是按照数字来的,加了这个逗号之后,tablesorter不认为它是数字了,他认为234.00比1,234.53大。这也难怪,看了例子,如果是这种货币格式,前面如果是$符号的话,这种格式排序是没问题的。
仔细看了一下文档,原来人家已经考虑到了这样的问题,加下面代码就可以了。

$("#myTable").tablesorter({
	headers: { 4: {sorter:"currency"}}
});

测试通过

另:推荐一篇关于中国教育讨论的文章