jquery字数和mvc csharp

时间:2013-09-12 13:22:46

标签: jquery

我在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,以便我可以使用相同的代码来处理几个textareas:

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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>