如果我将selector
作为parameter
传递给函数。
// selector is an object
function(selector) {
selector.trigger('eventHere');
}
显然,如果传入的event
没有selector
,event
将永远不会触发,但是我应该在触发事件之前进行一些条件检查吗?我的意思是:
// selector is an object
if(selector === 'matched'){
// then fire the event
}
else{
// do nothing
}
或者只是留下它??
答案 0 :(得分:5)
关于jQuery的好处是,如果选择器不匹配,它不会抛出异常或导致错误。所以你不需要做任何额外的事情;这是一个安全的操作:
// selector **must** be a jQuery object
// the assumption here is that you've already done
// var selector = $('selectorString'); elsewhere
// and have invoked this function with selector
function(selector){
selector.trigger('eventHere');
}
请注意,您必须确保selector
是jQuery对象!否则,您可能会收到错误消息,指出trigger
不是函数。
修改强>
Adam Terlson在评论中指出“如果jquery对象在执行函数之前为null或者长度为0,则值得测试。仅仅因为它不会抛出错误并不意味着首先不执行它就无法获得性能(jQuery仍在尝试)。“
还有一个jsperf测试表明,每种技术的操作/秒都有明显的差异(现在不是时候!我先把我扔了) - 检查null
/ 0
- 调用函数与调用函数之前的长度jQuery对象。
答案 1 :(得分:5)
jQuery总是返回一个元素数组,即使选择器根本没有返回任何元素,它也将包含一个空数组。
你仍然可以在没有jQuery抛出错误的情况下对该空数组执行任何函数,因此不需要检查返回的元素是否存在。
如果元素没有触发这样的事件,但是你尝试触发它,则不会发生任何事情,也不会再抛出任何异常;无需检查。
另请注意,如果您坚持将选择器传递给对象,则仍需要使用选择器获取对象,然后才能对它们执行任何操作。
function myTriggerFunction(selector)
{
var elements = $(selector);
elements.trigger('eventHere');
}
myTriggerFunction('.WeWillBeTriggered');
答案 2 :(得分:1)
只需触发事件..
但是 selector 变量实际上应该是一个jQuery对象(使用你使用的语法)。
答案 3 :(得分:1)
如果jQuery对象的创建与任何元素都不匹配,它仍然是一个jQuery对象,但内部没有元素。您在jQuery对象上执行的大多数方法都可以处理任意数量的元素,包括零,所以如果您只是不想做任何事情,则不必进行任何检查。
只有当你想要检查它的集合为空时你想要做一些特别的事情,并且你通过检查length
属性来做到这一点:
function(selection){
if (selection.length > 0) {
selection.trigger('eventHere');
} else {
// do something else because the selection was empty
}
}
请注意,“selector”是用于指定要放入jQuery对象的元素的字符串,如代码#main
中的字符串$('#main')
,因此调用jQuery对象“选择器“可能令人困惑。
答案 4 :(得分:0)
如果您想确保仅针对特定元素类型触发事件,您可以在触发事件之前检查该事件。
if (selector.is("type of element")) {
//then fire event
}
或者,如果您想通过标签名称
进行检查if (selector.get(0).tagName=="tag name") {
//then fire event
}