在jQuery中是否有任何内置支持用于基本断言检查,主要是"预期的返回元素数量"之类的东西.
例如,我可能有这样一个简单的陈述:
$("#btnSignup").click(function() { return validateForm(); );
现在有很多理由$("#btnSignup")
可能无法正确返回1项:
您错误输入了按钮ID名称
有人错误地重命名了
它不存在于页面上
错误地有两个带有id的元素
您正在使用ASP.NET MVC,你意外地生成按钮的HTML HtmlHelper.Button(...)
代替HtmlHelper.Submit()
.该Button(...)
方法不会为按钮元素创建ID.
现在在这个实例(和许多实例)中,除非从选择器返回一个项目,否则我的应用程序将无法工作.所以我总是想被告知是否$("@#btnSignup")
不返回1项.那我怎么能这样做?!我很好,如果这是一个例外或最好是一个警告框 - 所以如果我没有在调试器中运行,那么我可以被告知.
我正在寻找这样的语法 - 它的功能类似于.NET的Single()
扩展方法.
$("#btnSignup").assertSingle().click(function() { return validateForm(); ); or $("#btnSignup").assertSize(1).click(function() { return validateForm(); );
我个人对此代码总是运行良好并且告诉那里存在问题的人.对于所有永恒运行这个额外代码显然不是性能问题.在这种情况下,如果#btnSignup
不存在,我的代码就会被破坏.
我确信这个问题已经被打死了,并且有很多解决方案 - 但是有人能指出我的一些吗?
我没有看到任何内置于jQuery中的内容,并想知道最好的插件是什么.我更愿意只是在页面上有一些东西能够"监视"我,并告诉我是否有问题.我甚至不反对对错误报告服务进行AJAX调用.
看起来没有任何内置的东西.但写一个扩展并不太难:
$.fn.assertSize = function(size) { if (this.length != size) { alert("Expected " + size + " elements, but got " + this.length + "."); // or whatever, maybe use console.log to be more unobtrusive } return this; };
用法与您在问题中的建议完全一致.
$("#btnSignup").assertSize(1).click(function() { return validateForm(); );
请注意,即使断言失败,在当前形式下函数也会成功返回.你链接的任何东西仍然会被执行.使用return false;
而不是return this;
停止进一步执行链.
Tomalak答案的增强:抛出错误以停止执行,包括违规选择器并添加assertSingle
变体.
$.fn.assertSize = function(size) { if (this.length != size) { throw "Expected " + size + " elements, but selector '" + this.selector + "' found " + this.length + "."; } return this; }; $.fn.assertSingle = function() { return this.assertSize(1); };