我的查看代码如下所示我在key up事件上调用javascript函数。我想将控制值传递给javascript函数。 我尝试使用'this'和@this,但它没有用。
@Html.TextBoxFor(m => m.LeaveDetailsList[0].LeaveTaken, new {id = "numLeaveTaken1", width = "100", @onkeyup = "checkInp2(this);" })
**已编辑** Javascript代码:
function checkInp2(ControlId) {
var x = document.getElementById(ControlID).value;
if (isNaN(x)) {
document.getElementById("btnSave").disabled = true;
return false;
}
else {
document.getElementById("btnSave").disabled = false;
}
}
答案 0 :(得分:1)
您应该避免使用行为污染您的标记,而是使用Unobtrusive Javascript。给文本框一个类名
@Html.TextBoxFor(m => m.LeaveDetailsList[0].LeaveTaken, new { @class = "leave-taken" })
然后是剧本
var button = $('#btnSave'); // cache it
$('.leave-taken').keyup(function() {
if(isNaN($(this).val())) {
button.prop('disabled', true);
} else {
button.prop('disabled', false);
}
});
或者它可以简化为
$('.leave-taken').keyup(function() {
button.prop('disabled', !isNaN($(this).val()));
});
另请注意,控件现在可以使用css样式 - .leave-taken { width: 100px; }
答案 1 :(得分:1)
我认为你的onkeyup
事件应该有效(即使内联事件现在并不是最佳实践列表中的最重要事项),但不是当前函数。尝试将其更改为:
function checkInp2(ControlId) {
var x = ControlId.value;
...
}
您正在向该函数发送this
,指的是触发事件的元素,因此无需使用getElementById
。
如果您想通过Id显式获取元素,则可以使用..
document.getElementById('numLeaveTaken1').value; //pure JavaScript
$('#numLeaveTaken1').val(); //jQuery
在这种情况下,您可以一起跳过this
。