jQuery中有没有内置的对基本断言检查的支持,主要是像“返回元素的预期数量”这样的东西。
例如,我可能有这样一条简单的语句:
$("#btnSignup").click(function() {
return validateForm();
);现在有很多原因可以解释为什么$("#btnSignup")可能不会恰好返回1个项目:
HtmlHelper.Button(...)而不是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调用。
发布于 2009-01-31 08:37:13
它看起来不像是内置的。但是编写一个扩展并不太难:
$.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;来停止链的进一步执行。
发布于 2011-06-29 20:20:24
对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); };发布于 2013-03-01 01:19:53
我为此创建了一个插件:jquery-assert。你可以这样使用它:
在调用下一个函数之前,请确保找到一个或多个元素:
$('#element01').assertFound().val('x')断言选择了1个元素:
$('#element01').assertOne(); // same as assertFound(1)在调用进一步的函数之前,请确保找到给定数量的元素:
$('.item').assertFound(10).find('p').assertFound(10).data(...)https://stackoverflow.com/questions/498469
复制相似问题