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

标签 jquery debugging

jQuery 中是否有内置支持来进行基本断言检查,主要是“返回元素的预期数量”之类的内容。

例如,我可能有一个像这样的简单声明:

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

现在有很多原因导致 $("#btnSignup") 可能无法准确返回 1 项:

  • 您输错了按钮 ID 名称
  • 有人错误地重命名了它
  • 页面上不存在
  • 有两个元素错误地使用了该 ID
  • 您使用的是 ASP.NET MVC,并且意外地使用 HtmlHelper.Button(...) 而不是 HtmlHelper.Submit() 生成了按钮的 HTML。 Button(...) 方法不会为按钮元素创建 ID。

现在,在这种情况下(以及许多情况下),除非从选择器返回确切的一项,否则我的应用程序根本无法工作。所以我总是想知道 $("@#btnSignup") 是否没有返回 1 个项目。那么我该怎么做呢?如果这是一个异常(exception)或者最好是一个警报框,我很好 - 所以如果我没有在调试器中运行,那么我可以被告知。

我正在寻找类似这样的语法 - 其功能类似于 .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; 而不是 return this; 来停止链的进一步执行。

关于jQuery 断言支持/防御性编程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/498469/

相关文章:

javascript - 检查一个元素是否包含特定的子元素

javascript - 等待点击执行Javascript

javascript - 如何从序列化形式构建自定义对象?

c - 每次调试时变量的地址都会改变吗

java - 请帮助调试该程序中的错误

debugging - Laradock + PhpStorm + Xdebug 失败,而 PhpStorm 验证成功

javascript - jQuery UI 菜单获取/设置事件的 ui-menu-item

javascript - 在所有浏览器中 "Object doesn' t 支持属性或方法 'ajaxSubmit' "

c# - 为什么我的应用程序在 Release模式下崩溃但在 Debug模式下不崩溃?

php - 如何在 PHP 中获取有用的错误消息?