我在MVC3视图页面中有以下密码控制,并从控件本身调用onblur函数,
@Html.PasswordFor(m => m.CurrentPass, new Dictionary<string, object> { { "id", "txtCurrentPass" }, { "name", "CurrentPass" }, { "Class", "textBoxPlacHold fieldLblMargin" }, { "onblur", "$(this).currPasswordBlur();" } })
下面是我正在调用的jquery函数,
$.fn.currPasswordBlur = function () {
if ($('[id="txtCurrentPass"]').val() == '') {
$('#PasswordChangeErr').html("Please enter current password.");
$('[id="txtCurrentPass"]').addClass('outLineRed');
$('#PasswordChangeErr').show();
$('#MsgSucc').attr("style", "background-color:White;");
$("html, body").animate({ scrollTop: 0 }, "slow");
return false;
}
else {
$('#PasswordChangeErr').hide();
$('[id="txtCurrentPass"]').removeClass('outLineRed');
$('#MsgSucc').attr("style", "background-color:#dfe5e6;");
}
下面是以红色突出显示文本框,当执行到达返回false语句时,突出显示的文本框将消失。
$( '[ID = “txtCurrentPass”]')addClass( 'outLineRed');
我需要保留突出显示的文本框,即使我来自文本框。
答案 0 :(得分:1)
首先,您可以为htmlAttributes
声明中的PasswordFor
参数提供一个匿名对象,这会将其缩短很多。此外,您应该使用jQuery来绑定您的事件,而不是笨拙的on*
属性:
@Html.PasswordFor(m => m.CurrentPass, new { "id" = "txtCurrentPass", "name" = "CurrentPass", @"class" = "textBoxPlacHold fieldLblMargin" })
您当前的jQuery将该函数创建为插件,但它只涉及由id
定义的单个元素,因此没有插件的意义。您可以将代码放在一个blur
事件处理程序中:
$('#txtCurrentPass').blur(function() {
var $el = $(this);
if ($el.val() == '') {
$('#PasswordChangeErr').html("Please enter current password.").show();
$el.addClass('outLineRed');
$('#MsgSucc').css("background-color", "white");
$("html, body").animate({ scrollTop: 0 }, "slow");
}
else {
$('#PasswordChangeErr').hide();
$el.removeClass('outLineRed');
$('#MsgSucc').attr("style", "background-color:#dfe5e6;");
}
});
请注意,按id
选择时,您应该在ID上使用#
前缀,因为 比属性选择器更快