イベント発生時に一度だけ命令を実行する one()

 指定した要素で発生したイベントに対して、一度だけ実行する命令を設定できるのが one() です。


$(セレクター).one("イベント発生の条件",function(){//イベント発生時に実行する命令
})

 one() の括弧内にはイベント発生の条件を指定します。イベント発生の条件には、ここまでに説明してきた clickdblclickmouseuppusedownmousemovemouseoutmousemove などを記述します。その後を,(カンマ)で区切り、 function(){...} に実行したい命令を書きます。

 次のサンプルでは、a要素がクリックされたときに、一度目は画像が切り替わり、二度目はa要素に設定されているリンク先に移動します。

▼サンプル14(スクリプト部分)


$(function(){$("a").one("click",function(){$("img").attr("src",$(this).attr("href")).attr("alt",$(this).text());return false;})
})

▼サンプル14((X)HTML部分)


<ul><li><a href="flower.jpg">花</a></li><li><a href="sea.jpg">海</a></li><li><a href="Jellyfish.jpg">くらげ</a></li><li><a href="Building.jpg">建物</a></li>
</ul>
<p><img src="flower.jpg" alt="花" /></p>

▼サンプル14(実行結果)

サンプル14の実行画面。a要素をクリックすると最初は画像が切り換わる。2度目はa要素に設定されたリンクに移動する

設定されているイベント処理を取り消す unbind()

 unbind() は、設定されているイベント処理を取り消す命令です。


$(セレクター).unbind("イベント発生の条件");

 次のサンプルは、a要素がクリックされると、img要素を書き換える命令が設定されています。ただし、button要素がクリックされると unbind()a要素のイベントが取り消されます。a要素はbutton要素がクリックされる前は画像切り替えとして機能し、button要素がクリックされた後はa要素によるリンクに戻ります。

▼サンプル15(スクリプト部分)


$(function(){$("a").click(function(){$("img").attr("src",$(this).attr("href")).attr("alt",$(this).text());return false;})$("button").click(function(){$("a").unbind("click")})
})

▼サンプル15((X)HTML部分)


<button>取り消し</button>
<ul><li><a href="flower.jpg">花</a></li><li><a href="sea.jpg">海</a></li><li><a href="Jellyfish.jpg">くらげ</a></li>
</ul>
<p><img src="flower.jpg" alt="花" /></p>

Read more: http://ascii.jp/elem/000/000/450/450626/#ixzz20Pchyiin
サンプル15の実行画面。「取り消し」ボタンをクリックすると設定されているイベン
Read more: http://ascii.jp/elem/000/000/450/450626/#ixzz20PcsmIAH

将来追加される要素にイベント処理を設定できる live()

 現在と将来追加される要素に対して、イベント処理を設定できるのが live() です。「将来追加される要素」と聞くとちょっと分かりにくいですね。以下のソースコードを見てください。

▼サンプル16(スクリプト部分)


$(function(){$("a").click(function(){$("img").attr("src",$(this).attr("href")).attr("alt",$(this).text());return false;})$("button").click(function(){$("ul").append("<li><a href="Building.jpg">建物</a></li>")})
})

▼サンプル16(元の(X)HTML部分)


<button>li要素を追加</button>
<ul><li><a href="flower.jpg">花</a></li><li><a href="sea.jpg">海</a></li><li><a href="Jellyfish.jpg">くらげ</a></li>
</ul>
<p><img src="flower.jpg" alt="花" /></p>

 このプログラムでは、(1)a要素がクリックされると画像を切り換える命令(2)button要素がクリックされるとul要素に対して新しいli要素(a要素を含む)を追加する命令、の2つが設定されています。さてこの場合、(2)のイベント処理のあとに(1)を実行するとどうなるでしょうか? button要素をクリックしたことで追加された「建物」のa要素をクリックすると、画像は切り換わるのでしょうか?

 答えは×です。「花」「海」「くらげ」のa要素をクリックすると画像は切り換りますが、「建物」のa要素をクリックしても画像は切り換わらず、a要素のhref属性に記述されているリンク先に移動してしまいます。

▼サンプル16(実行結果)

サンプル16。button要素をクリックすると追加される「建物」には、a要素を対象としたイベントの処理が適用されない

 理由は、a要素に対してイベント処理が設定されたタイミングです。a要素のイベントの処理は、 $(function(){...}) で(X)HTMLがブラウザーに読み込まれた時点に設定されています。この段階では、(X)HTMLには「建物」のa要素は存在していません。

 こうした、イベント設定当時には存在していなかった要素に対してもイベントの処理を適用できるのが、live() です。


$(セレクター).live("イベント発生の条件",function(){//実行したい命令
})

 たとえば先のスクリプトの場合、次のように記述すれば、(X)HTMLが読み込まれた段階では存在していない「建物」にも、イベント処理を設定できます。

▼サンプル17(スクリプト部分)


$(function(){$("a").live("click",function(){$("img").attr("src",$(this).attr("href")).attr("alt",$(this).text());return false;})$("button").click(function(){$("ul").append("<li><a href="Building.jpg">建物</a></li>")})
})

▼サンプル17(実行結果)

サンプル17。button要素をクリックすると追加される「建物」にも、a要素を対象としたイベントの処理が適用される

jQueryのイベントのまとめ

 最後に、第6回~7回で解説したjQueryのイベントを表にまとめます。

命令 意味
click() クリック時に命令を実行する
dblclick() ダブルクリック時に命令を実行する
mousedown() マウスのボタンが押された時に命令を実行する
mouseup() マウスのボタンが離された時に命令を実行する
toggle() クリックされるたびに異なる命令を実行する
mouseover() マウスオーバー時に命令を実行する
mouseout() マウスアウト時に命令を実行する
mousemove() マウスが移動したときに命令を実行する
one() イベント発生時に一度だけ命令を実行する
unbind() 設定されているイベント処理を取り消す
live() 将来追加される要素にイベント処理を設定する

 セレクター、(X)HTML/CSSを操作する命令、イベント――とひととおり解説してきたjQueryの基本的な要素についてはここまでです。この間、さまざまなサンプルを紹介してきましたので、ぜひ実際に動かしながら、jQueryを使ったプログラムを書く感覚をつかんでおいてください。

 次回はjQueryを使ったフォームの制御方法について解説します。


Read more: http://ascii.jp/elem/000/000/450/450626/#ixzz20PfIA3Vt

jQueryのイベントをチュートリアルで学ぶ(後編)相关推荐

  1. jQueryのイベントをチュートリアルで学ぶ(前編)

    jQueryを使ったプログラムの基本的な要素として.セレクターと(X)HTML/CSSを操作する命令について解説してきました.今回はもう1つの重要な要素である 「イベント」を紹介します. 命令が実行さ ...

  2. 前端开始学java_[Java教程]开启前端学习之路

    [Java教程]开启前端学习之路 0 2014-06-10 17:00:06 前言 第一次在博客园写博客,写写自己开启前端学习之路.应该是受邢师兄的影响吧,不得不说邢师兄人很好,学习也很认真,师兄的前 ...

  3. JavaScript和jQuery的学习

    还有12天就要回学校了,我的假期计划还能实现吗?在这12天里,需要把JavaScript和jQuery学完.我知道这两个技术对于前端网页开发非常重要.前期把HTML和CSS学完了,学的不是特别深,只是 ...

  4. 前端框架——Jquery——基础篇7__工具函数(Utils)

    在我们实际的开发过程中,工具函数可以说是的用的最多的,知识虽然不难,但是用起来却有技巧性,这就是Jquery学起来的难点.这里介绍用Jquery处理最常见的三种对象,字符串,数组和表单操作,之后的话会 ...

  5. jquery 入门(jquery是什么/与JavaScript的联系与区别/jquery版本/引包/入口函数)

    1.  为何要学jQuery (1)JS的劣势 (2)jQuery是什么(理解) jQuery是别人帮我们封装好的库. jQuery是JS的一个库,封装了开发过程中常用的功能,能够提高开发效率. JS ...

  6. day13-web前端之JS与JQuery

    第1章 JavaScript课堂总结 Blog链接:JS语法基础:http://www.cnblogs.com/liwenzhou/p/8004649.htmlBOM和DOM:http://www.c ...

  7. jQuery 系列教程14篇-从选择器到动画ajax插件开发

    #第  004 期# jQuery是一个快速,小巧,功能丰富的JavaScript库. 它使HTML文档遍历和操作,事件处理和动画等操作变得更加简单. jQuery 快速入门(一) 开天辟地入门篇  ...

  8. jQuery的前世今生

    在WEB开发圈内,提起大名鼎鼎的jQuery,几乎无人不知,无人不晓,下面笔者就带大家一起扒一扒jQuery的各种八卦. jQuery诞生于2006年1月,至今已经有十个年头多了,其作者是美国大神Jo ...

  9. 程序员需要的各种PDF格式电子书【附网盘免费下载资源地址】

    程序员需要的各种PDF格式电子书[附网盘免费下载资源地址]   各位,请妥善保存,后期还会有更多更新,如果你有不同的书籍资源或者这里没有你要找的书籍,也可以直接留言,后期我们会继续更新~ Java & ...

最新文章

  1. layout-maxWidth属性用法
  2. c语言 指针_初识C语言指针
  3. 荣耀9“致敬”小米6?这是今年手机界最大的笑话!
  4. 用MSBuild.... DailyBuild和软件开发流程的东东
  5. mysql 显示重叠_一句话实现MySQL库中的重叠分组
  6. C# 解密微信步数 报错“填充无效,无法被移除。”
  7. Tea Data Analysis System 茶饮数据分析系统
  8. 扫呗扫码点餐,如何在扫呗后台给这个商户配一下支付授权地址
  9. 20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
  10. 网络负能量为何发展如此迅速?
  11. linux mysql 1055_mysql 1055错误
  12. 技术人的七大必备特质
  13. vue子组件获取祖先组件值的方法
  14. VSCode使用Dart和lutter所需按照的插件
  15. php拼接全景图,Opencv使用Stitcher类图像拼接生成全景图像
  16. nginx静态资源以及多个站点配置
  17. 《Windows核心编程》读书笔记二十五章 未处理异常,向量化异常处理与C++异常
  18. 某喜欢研究车的80后,驾驶经验59条
  19. clamwin anti-virus编译问题
  20. 如何使用PS将一小块图片填充为一个大背景

热门文章

  1. 浅析3GPP移动流媒体服务技术规范
  2. 远程下载 linux bt,在Linux上安装deluge实现BT离线下载
  3. IT安全风险管理最佳实践
  4. 使用mesh、Lora、NB通讯方式快速搭建共享停车位物联网解决方案
  5. 美团Leaf源码——号段模式源码解析
  6. Flutter 用Texture控件在Windows平台实现视频渲染
  7. Redisson之lock()和tryLock()的区别
  8. 中石油新生赛第八场 问题 G: 常州拔河
  9. sdut-ACM1170 C语言实验-----最值
  10. SLR分析算法c语言实现,实验五 SLR语法分析器.doc