- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jQuery 对 Rails 表单进行 ajax 验证。下面的脚本工作得很好,但我知道有一种方法可以通过声明字段名称和错误消息字符串,然后使脚本运行列表来使其更有效,但我还不够成熟,无法编写它。
重写它的正确方法是什么?
$( '.sendername' ).blur(function() {
if ($('.sendername').val() == "") {
$('.sendername-err').text('This field is required.');
$('.sendername').addClass('invalid');
} else {
$('.sendername-err').text('');
$('.sendername').removeClass('invalid');
}
});
$( '.email' ).blur(function() {
if ($('.email').val() == "") {
$('.email-err').text('You've forgotten this.');
$('.email').addClass('invalid');
} else {
$('.email-err').text('');
$('.email').removeClass('invalid');
}
});
$( '.subject' ).blur(function() {
if ($('.subject').val() == "") {
$('.subject-err').text('Please enter a value.');
$('.subject').addClass('invalid');
} else {
$('.subject-err').text('');
$('.subject').removeClass('invalid');
}
});
$( '.message' ).blur(function() {
if ($('.message').val() == "") {
$('.message-err').text('Zero characters is too short.');
$('.message').addClass('invalid');
} else {
$('.message-err').text('');
$('.message').removeClass('invalid');
}
});
我问这个问题是因为我想了解如何编写更好的 JavaScript。类似的情况经常出现,这让我很抓狂。
最佳答案
您的标记看起来不够一致,但您可以创建一个更一致的命名标准(使所有后缀和前缀相同 - 例如,始终使用 -name 或从不使用它),然后使用函数:
function setup_field(name, message) {
$( '.'+name+'-name' ).blur(function() {
if ($('.'+name+'-name').val() == "") {
$('.'+name+'-err').text(message);
$('.'+name+'-name').addClass('invalid');
} else {
$('.'+name+'-err').text('');
$('.'+name+'-name').removeClass('invalid');
}
});
}
然后你只需为每个字段调用它即可:
setup_field('sender', 'This field is required.');
setup_field('email', "You've forgotten this.");
setup_field('subject', 'Please enter a value.');
setup_field('message', 'Zero characters is too short.');
重点当然是使用函数。您甚至可以使其足够灵活,只需向函数签名添加更多变量即可根据需要以不同的方式定义每个类; setup_field(field_class, err_class, message)
,然后在适当的情况下将这些变量插入到上述函数中。但这会使您的设置区域更加冗长。
关于javascript - 如何让这个多余的javascript更加高效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894908/
我的服务层有如下方法 public ModuleResponse GetModules(ModuleRequest request) { var response = new ModuleRe
我构建的工具栏与大多数工具栏一样,minHeight 设置为 actionBarSize: 但是,如果我删除这个属性,就完全没有区别了。工具栏保持其 actionBarSize,即使我删除菜单并将
我已经为 SVG 和剪辑路径苦苦挣扎了一段时间。 我正在尝试创建一个三 Angular 形剪辑路径,它将覆盖照片以给顶部一个“三 Angular 形”边缘。 我试图实现与照片完全相同的效果,但三 An
我有一个带有 2 个索引的 PostgreSQL 表。其中一个索引涵盖了 website_id 和 tweet_id 列,是一个唯一的 B 树索引。第二个索引只覆盖 website_id 列,是一个非
我是一名优秀的程序员,十分优秀!