当前位置:  开发笔记 > 编程语言 > 正文

jQuery断言支持/防御性编程?

如何解决《jQuery断言支持/防御性编程?》经验,为你挑选了2个好方法。

在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调用.



1> Tomalak..:

看起来没有任何内置的东西.但写一个扩展并不太难:

$.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;停止进一步执行链.


$ .fn.assertSingle = function(){return this.assertSize(1); };

2> Peter Hilton..:

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); };

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有