mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-06-08 15:04:05 +08:00
242 lines
15 KiB
HTML
242 lines
15 KiB
HTML
<article class="" id="post-">
|
||
<header class="entry-header">
|
||
<h1 class="entry-title">.live()</h1>
|
||
<div class="entry-meta">
|
||
所属分类:<span class="category"><a href="/category/events/">事件</a> > <a href="/category/events/event-handler-attachment/">绑定事件处理器</a></span><span class="category-divider"> | </span><span class="category"><a href="/category/deprecated/">弃用</a> > <a href="/category/deprecated/deprecated-1.7/">1.7 版本弃用的 API</a></span><span class="category-divider"> | </span><span class="category"><a href="/category/removed/">已删除的函数</a></span>
|
||
<span class="pull-right">英文文档:<a href="https://api.jquery123.com/live/" target="_blank">.live()</a></span>
|
||
</div><!-- .entry-meta -->
|
||
</header><!-- .entry-header -->
|
||
<!-- .entry-header -->
|
||
<div class="entry-content">
|
||
<article class="entry method" id="live1"><h2 class="section-title">
|
||
<span class="name">.live( events, handler(eventObject) )</span><span class="returns">返回: <a href="/Types/#jQuery">jQuery</a></span><span class="version-details">version deprecated: <a href="/category/version/1.7/">1.7</a>, removed: <a href="/category/version/1.9/">1.9</a></span>
|
||
</h2>
|
||
<div class="entry-wrapper">
|
||
<p class="desc"><strong>描述: </strong>附加一个事件处理器到匹配目前选择器的所有元素,现在和未来。</p>
|
||
<ul class="signatures">
|
||
<li class="signature" id="live-events-handlereventObject">
|
||
<h4 class="name">
|
||
<span class="version-details">添加的版本: <a href="/category/version/1.3/">1.3</a></span>.live( events, handler(eventObject) )</h4>
|
||
<ul>
|
||
<li>
|
||
<div><strong>events</strong></div>
|
||
<div>类型: <a href="/Types/#String">String</a>
|
||
</div>
|
||
<div>
|
||
一个包含一个JavaScript事件类型的字符串,比如"click"或"keydown,"或自定义事件的名称。从jQuery 1.4开始,字符串可以包含多个空格分隔的事件类型或自定义事件的名称。</div>
|
||
</li>
|
||
<li>
|
||
<div><strong>handler(eventObject)</strong></div>
|
||
<div>类型: <a href="/Types/#Function">Function</a>()</div>
|
||
<div>每当事件触发时执行的函数。</div>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="signature" id="live-events-data-handlereventObject">
|
||
<h4 class="name">
|
||
<span class="version-details">添加的版本: <a href="/category/version/1.4/">1.4</a></span>.live( events, data, handler(eventObject) )</h4>
|
||
<ul>
|
||
<li>
|
||
<div><strong>events</strong></div>
|
||
<div>类型: <a href="/Types/#String">String</a>
|
||
</div>
|
||
<div>
|
||
一个包含一个JavaScript事件类型的字符串,比如"click"或"keydown,"或自定义事件的名称。从jQuery 1.4开始,字符串可以包含多个空格分隔的事件类型或自定义事件的名称。</div>
|
||
</li>
|
||
<li>
|
||
<div><strong>data</strong></div>
|
||
<div>类型: <a href="/Types/#PlainObject">PlainObject</a>
|
||
</div>
|
||
<div>一个包含数据的对象将被传递到事件处理程序。</div>
|
||
</li>
|
||
<li>
|
||
<div><strong>handler(eventObject)</strong></div>
|
||
<div>类型: <a href="/Types/#Function">Function</a>()</div>
|
||
<div>每当事件触发时执行的函数。</div>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="signature" id="live-events">
|
||
<h4 class="name">
|
||
<span class="version-details">添加的版本: <a href="/category/version/1.4.3/">1.4.3</a></span>.live( events )</h4>
|
||
<ul><li>
|
||
<div><strong>events</strong></div>
|
||
<div>类型: <a href="/Types/#PlainObject">PlainObject</a>
|
||
</div>
|
||
<div>一个或多个JavaScript事件类型的一个普通的对象及其对应的执行函数组成的映射。。</div>
|
||
</li></ul>
|
||
</li>
|
||
</ul>
|
||
<div class="longdesc" id="entry-longdesc">
|
||
<p>
|
||
<strong>从jQuery1.7开始</strong>,
|
||
<code>.live()</code> 方法已经过时了。请使用<a href="/on"><code>.on()</code></a>附加事件处理程序。
|
||
旧版本的jQuery中用户,应优先使用<a href="/delegate"><code>.delegate()</code></a>来取代<code>.live()</code>。</p>
|
||
<p>这个方法提供了一种手段,将委托的事件处理程序附加到一个页面的<code>document</code>元素,从而简化了在页面上动态添加的内容上事件处理的使用。直接与委派事件的讨论,请查看<a href="/on"><code>.on()</code></a>方法的更多信息。</p>
|
||
<p>在其继承者重写<code>.live()</code>方法是简单的;以下是三种事件添加方法的模板,它们是等价的:</p>
|
||
<div class="syntaxhighlighter javascript nogutter">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
<div class="line n2">2</div>
|
||
<div class="line n3">3</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(selector).live(events, data, handler); <span class="comment">// jQuery 1.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).delegate(selector, events, data, handler); <span class="comment">// jQuery 1.4.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).on(events, selector, data, handler); <span class="comment">// jQuery 1.7+</span></code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<p>
|
||
<code>events</code> 参数可以是一个空格隔开的事件类型名称的列表和可选的命名空间,或事件名称字符串和处理程序的对象。<code>data</code>参数是可选的,可以省略。例如,以下三种方法调用方式在功能上是相同的(后文还提供了更有效,性能更好的添加代理事件处理的方式):
|
||
|
||
</p>
|
||
<div class="syntaxhighlighter javascript nogutter">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
<div class="line n2">2</div>
|
||
<div class="line n3">3</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(<span class="string">"a.offsite"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); }); <span class="comment">// jQuery 1.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).delegate(<span class="string">"a.offsite"</span>, <span class="string">"click"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); }); <span class="comment">// jQuery 1.4.3+</span></code></div></div><div class="container"><div class="line"><code>$(document).on(<span class="string">"click"</span>, <span class="string">"a.offsite"</span>, <span class="keyword">function</span>(){ alert(<span class="string">"Goodbye!"</span>); }); <span class="comment">// jQuery 1.7+</span></code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<p>因为更高版本的jQuery提供了更好的方法,没有<code>.live()</code>方法的缺点,所以<code>.live()</code>方法不再推荐使用。特别是,使用<code>.live()</code>出现的以下问题:</p>
|
||
<ul>
|
||
<li>在调用 <code>.live()</code> 方法之前,jQuery 会先获取与指定的选择器匹配的元素,这一点对于大型文档来说是很花费时间的。
|
||
</li>
|
||
<li>不支持链式写法。例如,<code>$("a").find(".offsite, .external").live( ... ); </code> 这样的写法是<em>不合法</em>的,并不能像期待的那样起作用。
|
||
</li>
|
||
<li>由于所有的 <code>.live()</code> 事件被添加到 <code>document</code> 元素上,所以在事件被处理之前,可能会通过最长最慢的那条路径之后才能被触发。
|
||
</li>
|
||
<li>在移动 iOS (iPhone, iPad 和 iPod Touch) 上,对于大多数元素而言,<code>click</code> 事件不会冒泡到文档 body 上,并且如果不满足如下情况之一,就不能和 <code>.live()</code> 方法一起使用:
|
||
|
||
<ol>
|
||
<li>使用原生的可被点击的元素,例如, <code>a</code> 或 <code>button</code>,因为这两个元素可以冒泡到 <code>document</code>。
|
||
</li>
|
||
<li>在 <code>document.body</code> 内的元素使用 <code>.on()</code> 或 <code>.delegate()</code> 进行绑定,因为移动 iOS 只有在 body 内才能进行冒泡。
|
||
</li>
|
||
<li>需要 click 冒泡到元素上才能应用的 CSS 样式 <code>cursor:pointer</code> (或者是父元素包含 <code>document.documentElement</code>)。但是依需注意的是,这样会禁止元素上的复制/粘贴功能,并且当点击元素时,会导致该元素被高亮显示。
|
||
</li>
|
||
</ol>
|
||
</li>
|
||
<li>在事件处理中调用 <code><a href="event.stopPropagation.htm">
|
||
event.stopPropagation()</a></code>
|
||
来阻止事件处理被添加到 document 之后的节点中,是效率很低的。因为事件已经被传播到 <code>document</code> 上。
|
||
</li>
|
||
<li><code>.live()</code> 方法与其它事件方法的相互影响是会令人感到惊讶的。例如,<code>$(document).unbind("click")</code> 会移除所有通过 <code>.live()</code> 添加的 click 事件!
|
||
</li>
|
||
</ul>
|
||
<p>对于仍在使用<code>.live()</code>的页面,那么下面关于该方法在不同版中的区别,可能会对您有一定帮助:</p>
|
||
<ul>
|
||
<li>在 jQuery 1.7 之前,如果想阻止通过 <code>.live()</code> 绑定的事件被冒泡到其它元素上,必须在事件处理中返回 <code>false</code>。调用 <code>.stopPropagation()</code> 是不起作用的。
|
||
</li>
|
||
<li>从 <b>jQuery 1.4</b> 开始,<code>.live()</code> 方法支持自定义事件,也支持<em>所有 JavaScript 事件冒泡</em>。它还支持一些原本不能冒泡的事件,包括 <code>change</code>, <code>submit</code>, <code>focus</code> 和 <code>blur</code>。
|
||
</li>
|
||
<li>在 <b>jQuery 1.3.x</b> 中,只能绑定如下 JavaScript 事件:<code>click</code>, <code>dblclick</code>, <code>keydown</code>, <code>keypress</code>, <code>keyup</code>, <code>mousedown</code>, <code>mousemove</code>, <code>mouseout</code>, <code>mouseover</code>, 和 <code>mouseup</code>.
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<section class="entry-examples" id="entry-examples"><header><h2 class="underline">例子:</h2></header><div class="entry-example" id="example-0">
|
||
<h4>Example: <span class="desc">点击段落时,添加另一个段落。注意,.live() 会为所有的段落(包括新生成的段落)绑定事件。</span>
|
||
</h4>
|
||
<div class="syntaxhighlighter javascript ">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(<span class="string">"a"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>() { <span class="keyword">return</span> <span class="literal">false</span>; })</code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div class="entry-example" id="example-1">
|
||
<h4>Example: <span class="desc">通过使用 preventDefault 方法仅取消默认的动作。</span>
|
||
</h4>
|
||
<div class="syntaxhighlighter javascript ">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
<div class="line n2">2</div>
|
||
<div class="line n3">3</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(<span class="string">"a"</span>).live(<span class="string">"click"</span>, <span class="keyword">function</span>(event){</code></div></div><div class="container"><div class="line"><code> event.preventDefault();</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div class="entry-example" id="example-2">
|
||
<h4>Example: <span class="desc">使用 .live() 绑定自定义事件。</span>
|
||
</h4>
|
||
<div class="syntaxhighlighter javascript ">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
<div class="line n2">2</div>
|
||
<div class="line n3">3</div>
|
||
<div class="line n4">4</div>
|
||
<div class="line n5">5</div>
|
||
<div class="line n6">6</div>
|
||
<div class="line n7">7</div>
|
||
<div class="line n8">8</div>
|
||
<div class="line n9">9</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(<span class="string">"p"</span>).live(<span class="string">"myCustomEvent"</span>, <span class="keyword">function</span>(e, myName, myValue) {</code></div></div><div class="container"><div class="line"><code> $(<span class="keyword">this</span>).text(<span class="string">"Hi there!"</span>);</code></div></div><div class="container"><div class="line"><code> $(<span class="string">"span"</span>).stop().css(<span class="string">"opacity"</span>, <span class="number">1</span>)</code></div></div><div class="container"><div class="line"><code> .text(<span class="string">"myName = "</span> + myName)</code></div></div><div class="container"><div class="line"><code> .fadeIn(<span class="number">30</span>).fadeOut(<span class="number">1000</span>);</code></div></div><div class="container"><div class="line"><code>});</code></div></div><div class="container"><div class="line"><code>$(<span class="string">"button"</span>).click(<span class="function"><span class="keyword">function</span> <span class="params">()</span> {</span></code></div></div><div class="container"><div class="line"><code> $(<span class="string">"p"</span>).trigger(<span class="string">"myCustomEvent"</span>);</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div class="entry-example" id="example-3">
|
||
<h4>Example: <span class="desc">使用映射绑定多个事件处理。注意,.live() 会为所有的段落(包括新生成的段落)绑定 click, mouseover, 和 mouseout 事件。</span>
|
||
</h4>
|
||
<div class="syntaxhighlighter javascript ">
|
||
<table>
|
||
<tbody>
|
||
<tr>
|
||
<td class="gutter">
|
||
<div class="line n1">1</div>
|
||
<div class="line n2">2</div>
|
||
<div class="line n3">3</div>
|
||
<div class="line n4">4</div>
|
||
<div class="line n5">5</div>
|
||
<div class="line n6">6</div>
|
||
<div class="line n7">7</div>
|
||
<div class="line n8">8</div>
|
||
<div class="line n9">9</div>
|
||
<div class="line n10">10</div>
|
||
<div class="line n11">11</div>
|
||
</td>
|
||
<td class="code">
|
||
<pre><div class="container"><div class="line"><code>$(<span class="string">"p"</span>).live({</code></div></div><div class="container"><div class="line"><code> click: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code> $(<span class="keyword">this</span>).after(<span class="string">"<p>Another paragraph!</p>"</span>);</code></div></div><div class="container"><div class="line"><code> },</code></div></div><div class="container"><div class="line"><code> mouseover: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code> $(<span class="keyword">this</span>).addClass(<span class="string">"over"</span>);</code></div></div><div class="container"><div class="line"><code> },</code></div></div><div class="container"><div class="line"><code> mouseout: <span class="keyword">function</span>() {</code></div></div><div class="container"><div class="line"><code> $(<span class="keyword">this</span>).removeClass(<span class="string">"over"</span>);</code></div></div><div class="container"><div class="line"><code> }</code></div></div><div class="container"><div class="line"><code>});</code></div></div></pre>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div></section>
|
||
</div></article> </div>
|
||
</article> |