如何将Textbox值传递给Javascript函数?

时间:2015-05-09 09:27:11

标签: javascript jquery asp.net-mvc asp.net-mvc-4 razor

我的查看代码如下所示我在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;
    }
}

2 个答案:

答案 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