是否有任何内置的jQuery支持基本的断言检查,主要是像“预期的返回元素数”。
例如我可能会有这样一个简单的语句:
$("#btnSignup").click(function() { return validateForm(); );
现在有很多原因,为什么$(“#btnSignup”)可能不会完全返回1项:
>你错误地键入了按钮的id名称
有人把错误的名字重命名
>它不存在于页面上
>有两个元素与该id的错误
>您正在使用ASP.NET MVC,您不小心使用HtmlHelper.Button(…)生成了按钮的HTML代替HtmlHelper.Submit()。 Button(…)方法不会为按钮元素创建ID。
现在在这种情况下(和许多实例),我的应用程序根本不工作,除非从选择器返回一个项目。所以我总是想要被告知$(“@#btnSignup”)不会完全返回1个项目。那我该怎么办呢?我很好,如果这是一个例外或者最好是一个警报框 – 所以如果我没有运行在一个调试器,那么我可以被告知。
我正在寻找这样的语法,这与.NET的Single()
扩展方法的功能相似。
$("#btnSignup").assertSingle().click(function() { return validateForm(); ); or $("#btnSignup").assertSize(1).click(function() { return validateForm(); );
我个人认为这个代码总是很好运行,告诉谁在那里有一个问题。它显然不是performance issue运行这个额外的代码永远。在这种情况下,如果#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;而不是返回这个;停止进一步执行链。