$(
"#btnDetails"
).bind(
"click"
,
function
(){
$(
"#divDetails"
).toggle();
});
</div> </td> </tr> </tbody> </table> </div> </div> </div>
从上述的例子(在线例子:http://blog.viscenthuang.info/jQuery/page/CodeDemo.htm?code=EvtBinding.htm)中可以看出。当选择器所匹配的元素被单击时, bind 方法的第二个参数所指定的函数会被 jQuery 调用。而负责显示/隐藏 divDetails
块的代码就会随着其所在的函数被调用而被执行,从而实现了预期的页面效果。
bind 方法的语法是:
event :要处理的事件的名称。该名称不需要加前缀 on。
handler :事件监听器,即对浏览器事件进行处理的函数。这通常是一个匿名函数。在 event 参数所表示的事件被触发后,jQuery 会调用这个函数(即回调),并向该函数传入一个 jQuery 自定义的事件对象。该事件对象是 jQuery 根据原始的浏览器事件对象创建的。jQuery 这么做是通过一个”中立”的事件对象来规避不同的浏览器所提供的同一个事件的事件对象的属性不同的问题。这使得我们可以用同样的代码处理事件,而不必关心 不同浏览器所提供的原始事件对象的差异。
data :表示需要在事件触发后传递给事件监听器的额外数据。它是作为 jQuery 事件对象的 data 属性传递给事件监听器的。
下面看具体的例子。
使用 jQuery 事件对象
对某些事件的处理,我们可能需要从事件对象中获取当前事件的进一步信息。
假设页面上有个输入框只允许输入数字。当用户输入的字符为非数字字符时,页面能够自动将其”过滤”掉,即在输入框中不显示这些无效的字符。实现这样 的功能就需要从表示用户输入的 keypress 事件对象中获取用户当前所按的键的键盘编码值,以便找出相应的字符。代码如清单 15 所示:
清单 15.使用 jQuery 事件对象
$( "#txtVerifyCode" ).bind( "keypress" , function (evt){ var keyCode=evt.which; var char=String.fromCharCode(keyCode) ; if (!/\d/.test(char)){ evt.preventDefault(); } });
</div> </td> </tr> </tbody> </table> </div> </div> </div> 从上面的例子(在线例子:http://blog.viscenthuang.info/jQuery/page/CodeDemo.htm?code=JqEvtObj.htm)可以看出,具体是什么按键触发了 keypress 事件的信息可以从 jQuery 封装的 jQuery 对象的相应属性 keyCode 中获取。而 jQuery 在调用我们的事件监听器时会将其封装的事件对象作为唯一参数传递给事件监听器。 向事件监听器传递额外参数 下面看一个向监听器传递额外参数的例子。 假设现在有个能够在页面中显示提示信息的函数,其定义如下: function showTip(msg){ $( '#divTips' ).html(msg); }
</div> </td> </tr> </tbody> </table> </div> </div> </div> 页面上有两个按钮,它们被单击的时候页面上分别会显示不同的提示信息。那么,我们可以编写如下的事件监听器: 清单 16.从事件对象中获取额外数据 | |