0

我正在用 c# MVC4 编码。

在我的 create.cshtml

我有这个代码:

@{
    ViewBag.Title = "My wonderful creation";
}
<script type="text/javascript">
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S+/g).length;
    if (words > 100) 
    {
      var trimmed = $(this).val().split(/\s+/, 100).join(" ");
      $(this).val(trimmed + " ");
    }    
  });
}); 
</script>


 <div class="editor-field">
            @Html.TextAreaFor(model => model.mywonderful, new { @id = "word_count" })
            @Html.ValidationMessageFor(model => model.mywonderful)
        </div>

这不起作用。当我查看源代码时,代码如下所示:

<script type="text/javascript">
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S+/g).length;
    if (words > 100) 
    {
      var trimmed = $(this).val().split(/\s+/, 100).join(" ");
      $(this).val(trimmed + " ");
    }    
  });
}); 
</script>


<div class="editor-field">
            <textarea  id="word_count" name="mywonderful" rows="2" cols="20">
</textarea>
            <span class="field-validation-valid" data-valmsg-for="mywonderful" data-valmsg-replace="true"></span>
        </div>
<script src="/Scripts/jquery-1.9.1.js"></script>

如何让字数和验证在 c# mvc 中工作。这在 php 中很容易做到,但是 c# mvc 是另一回事。

我最终使用了普通的旧javascript,这样我就可以对几个文本区域使用相同的代码:

<script type="text/javascript">
    var maxWords = 100;
    function limitLengthInWords(field)
    {
        var value = field.value,
            wordCount = value.split(/\S+/).length - 1,
            re = new RegExp("^\\s*\\S+(?:\\s+\\S+){0," + (maxWords - 1) + "}");
        if (wordCount >= maxWords)
        {
            field.value = value.match(re);
        }
        document.getElementById('description_count').innerHTML = maxWords - wordCount;
    }
</script>
4

2 回答 2

1

您在使用它后已经加载了 jquery lib!所以您可以将顶部脚本移动到底部或在顶部加载 jquery lib

<script src="/Scripts/jquery-1.9.1.js"></script>

<script type="text/javascript">
$(document).ready(function() {
  $("#word_count").on('keyup', function() {
    var words = this.value.match(/\S+/g).length;
    if (words > 100) 
    {
      var trimmed = $(this).val().split(/\s+/, 100).join(" ");
      $(this).val(trimmed + " ");
    }    
  });
}); 
</script>

你正在检查 textarea 所以你需要检查 innerHtml 而不是值

var words = $(this).html().match(/\S+/g).length;
于 2013-09-12T13:26:58.173 回答
0

这与 C# 或 MVC 无关 - 您在使用 jQuery 代码之后包含 jQuery。当您有任何意外行为时,您首先检查的应该是控制台。你会看到$ is undefined这是你解决这个问题的第一个线索。要修复,请尝试以下操作:

<script src="/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("#word_count").on('keyup', function() {
            var words = this.value.match(/\S+/g).length;
            if (words > 100)  {
                var trimmed = $(this).val().split(/\s+/, 100).join(" ");
                $(this).val(trimmed + " ");
            }    
        });
    }); 
</script>
于 2013-09-12T13:28:37.197 回答