当前位置:首页 > jQuery教程:雅蛙网ajax特效jQuery实现方法(三)

jQuery教程:雅蛙网ajax特效jQuery实现方法(三)

点击次数:2089  更新日期:2011-01-05
\n

  目标:看到个性化标题没,只要点击,就出现一个文本输入框,输入相应的内容,点击保存就OK了,那么,如何实现这一效果呢?
  思路:怎么做呢?个人认为可以分一下几步
  1、取出层usertitle中的值
  2、将usertitle换成一个文本输入框(usertitleinput)和保存、取消button
  3、点击“saveButton”时:将usertitleInput的val存入数据库并执行5
  4、点击“cancelButton”时:执行5
  5、将usertitleInput等换回usertitle
  进一步思考:首先是点击usertitle的时候,才触发这一系列的效果。


\n


function x339()
{
editUsertitle();
}
function editUsertitle()
{
(“#usertitle”).click(function(){
//……
})
}
还可以这样写


\n

function x339()
{
(“#usertitle”).click(editUsertitle);
}


\n

function editUsertitle()


\n

{
//……
}


\n


\n

  插入基础介绍:事件
  click(fn),触发一个单击事件中绑定的函数,fn(Function):绑定到click事件的函数。如果是双击,可以使用dbclick(fn)。还有一种方法,就是使用bind,bind更为高级一点,他不但可以绑定click,还可以绑定dbclick、submit等,不光如此,他还可以在事件处理之前传递一些附加的数据。详情参看jQuery API文档。


\n


  之后是获得usertitle的值,首先先明确一下,usertitle是个div。
(“#usertitle”).html();


\n


  插入基础介绍:属性
  取值应该说有4个函数
  1、html()——–取html内容
  2、text()——–取文本
  3、val()———-取select等
  4、attr(name)—-取属性,如(“img”).attr(“src”);
  详情参看jQuery API文档。


\n

  接着是将usertitle换成一个文本输入框(usertitleinput)和保存、取消button。如何做呢?一种方法是在usertitle之前或之后插入这些内容,再将usertitle删除;还有一种方法,直接用这些内容将usertitle替换掉,也不错。再有呢?反正你的这些内容也要放在一个div中,我何不直接将他们放在usertitle中呢?看起来不错,可是前面我们有一个函数是点击usertitle触发的,如果这样,意味着usertitle是时刻存在的,点击一次就要触发一次……不行,如果你坚持这么做,也可以,之前用bind()绑定click事件,这会用unbind可以删除绑定的事件,不过这样貌似麻烦了。比较优劣,最后决定使用替换的方法,简单!


\n

var titlearea=’<div id=”usertitle2″><input type=”text” class=”usertitleInput” value=’+titleval+’ /><input type=”button” value=”SAVE” class=”saveButton” /> <input type=”button” value=”CANCEL” class=”cancelButton” /></div>’;
(“#usertitle”).replaceWith(titlearea);


\n


  插入基础介绍:文档处理
  replaceWith(content)将所有匹配的元素替换成指定的HTML或DOM元素。empty()删除匹配的元素集合中所有的子节点。remove()从DOM中删除所有匹配的元素。有必要说下empty()和remove()的区别,empty是仅删除容器内的内容,而容器还保留着,而remove是把容器和内容都删除。文档处理的函数还有很多,这些内容很重要,请参看jQuery API文档。


\n

  之后貌似没什么说的了,看完整的代码


\n

function editUsertitle()
{
(“#usertitle”).click(function(){
var titleval=(this).html();
var titlearea=’<div id=”usertitle2″><input type=”text” class=”usertitleInput” value=’+titleval+’ /><input type=”button” value=”SAVE” class=”saveButton” /> <input type=”button” value=”CANCEL” class=”cancelButton” /></div>’;
(this).replaceWith(titlearea);
(“.usertitleInput”).focus();
(‘.saveButton’).click(function(){
saveChanges(false);
});
(‘.cancelButton’).click(function(){
saveChanges(titleval);
});
})
}
function saveChanges(cancel)
{
if(!cancel)
{
var t=(“.usertitleInput”).val();
.ajax({
url:”asp/savetitle.htm”,
cache:false,
success:function(rt){
//……
}
});
}
else
{
var t=cancel;
}
if(t==”")
t=”请输入个性化主页标题”;
(“#usertitle2″).replaceWith(‘<div id=”usertitle”>’+t+’</div>’);
editUsertitle();
}


\n


最后这,为什么又调用editUsertitle()函数呢?刚才吧usertitle替换了,当然绑定的函数也没了,这里再绑定下。


\n