首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery断言支持/防御性编程?

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

Stack Overflow用户
提问于 2009-01-31 07:55:52
回答 4查看 4.1K关注 0票数 18

jQuery中有没有内置的对基本断言检查的支持,主要是像“返回元素的预期数量”这样的东西。

例如,我可能有这样一条简单的语句:

代码语言:javascript
复制
 $("#btnSignup").click(function() {
     return validateForm();
 );

现在有很多原因可以解释为什么$("#btnSignup")可能不会恰好返回1个项目:

  • 您错误地键入了按钮id名称
  • 有人错误地将其重命名为
  • 它不存在于页面上
  • 有两个具有该id的元素错误
  • 您正在使用ASP.NET MVC,并且您意外地使用HtmlHelper.Button(...)而不是HtmlHelper.Submit()生成了按钮的超文本标记语言。Button(...)方法不为按钮元素创建ID。

现在,在这个实例(以及许多实例)中,我的应用程序将无法工作,除非选择器恰好返回一项。所以我总是想被告知,如果$("@#btnSignup")没有恰好返回1项。那么我该怎么做呢?!如果这是一个异常,或者最好是一个警告框,我会很好-所以如果我不是在调试器中运行,那么我可以被告知。

我正在寻找类似这样的语法-它在功能上类似于.NET的Single()扩展方法。

代码语言:javascript
复制
 $("#btnSignup").assertSingle().click(function() {
     return validateForm();
 );

 or 

 $("#btnSignup").assertSize(1).click(function() {
     return validateForm();
 );

就我个人而言,让这段代码始终运行并告诉那里的任何人有问题是没有问题的。这显然不是一个永远运行这些额外代码的performance issue。在这个例子中,如果#btnSignup不存在,我的代码就会崩溃。

我相信这个问题已经被打死了,而且有很多解决方案--但是有人能给我指出其中的一些吗?

我没有看到任何内置在jQuery中的东西,我想知道最好的插件是什么。我更愿意在页面上有一些东西,可以一直“监视”我,并告诉我是否有问题。我甚至不反对对错误报告服务进行AJAX调用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-31 08:37:13

它看起来不像是内置的。但是编写一个扩展并不太难:

代码语言:javascript
复制
$.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;
};

用法与您在问题中提出的完全相同。

代码语言:javascript
复制
$("#btnSignup").assertSize(1).click(function() {
  return validateForm();
);

请注意,在当前形式下,即使断言失败,函数也会成功返回。您链接的任何内容仍将被执行。使用return false;而不是return this;来停止链的进一步执行。

票数 15
EN

Stack Overflow用户

发布于 2011-06-29 20:20:24

对Tomalak答案的增强:抛出错误以停止执行,包括有问题的选择器并添加assertSingle变体。

代码语言:javascript
复制
$.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); };
票数 8
EN

Stack Overflow用户

发布于 2013-03-01 01:19:53

我为此创建了一个插件:jquery-assert。你可以这样使用它:

在调用下一个函数之前,请确保找到一个或多个元素:

代码语言:javascript
复制
$('#element01').assertFound().val('x')

断言选择了1个元素:

代码语言:javascript
复制
$('#element01').assertOne(); // same as assertFound(1)

在调用进一步的函数之前,请确保找到给定数量的元素:

代码语言:javascript
复制
$('.item').assertFound(10).find('p').assertFound(10).data(...)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/498469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档