在jQuery中是否有任何内置支持用于基本断言检查,主要是"预期的返回元素数量"之类的东西.
例如,我可能有这样一个简单的陈述:
$("#btnSignup").click(function() {
return validateForm();
);
Run Code Online (Sandbox Code Playgroud)
现在有很多理由$("#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();
);
Run Code Online (Sandbox Code Playgroud)
我个人对此代码总是运行良好并且告诉那里存在问题的人.对于所有永恒运行这个额外代码显然不是性能问题.在这种情况下,如果#btnSignup不存在,我的代码就会被破坏.
我确信这个问题已经被打死了,并且有很多解决方案 - 但是有人能指出我的一些吗?
我没有看到任何内置于jQuery中的内容,并想知道最好的插件是什么.我更愿意只是在页面上有一些东西能够"监视"我,并告诉我是否有问题.我甚至不反对对错误报告服务进行AJAX调用.
Tom*_*lak 15
看起来没有任何内置的东西.但写一个扩展并不太难:
$.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;
};
Run Code Online (Sandbox Code Playgroud)
用法与您在问题中的建议完全一致.
$("#btnSignup").assertSize(1).click(function() {
return validateForm();
);
Run Code Online (Sandbox Code Playgroud)
请注意,即使断言失败,在当前形式下函数也会成功返回.你链接的任何东西仍然会被执行.使用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); };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4088 次 |
| 最近记录: |