Javascript函数没有被触发?

时间:2012-02-11 21:21:05

标签: c# javascript asp.net-mvc ckeditor

在我的MVC 3应用程序中,我使用CKeditor编辑富文本。现在我需要能够使用HTML标签将文本保存到DB。

问题是我点击按钮'保存'没有任何反应。

警报返回未定义。

查看:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        @Html.DropDownListFor(model=>model.Id, Model.Texts)  
        <div class="editor-field">
            @Html.TextAreaFor((model => model.Text), new { @Id = "editor1" })
            @Html.ValidationMessageFor(model => model.Text)
        </div> 
        <script type="text/javascript">
            CKEDITOR.replace('editor1');
            </script>

        <script type="text/javascript">
            var editor_data1 = $('editor1').val(); 
            var editor_data = editor_data1.getHtml();
            var url = '@Url.Action("EditText", "Admin")';
            var data = { commentText: editor_data };

            function Save() {
                alert(editor_data);
                $.post(url, data, function(result) {  

});

            };
            $('#Id').change(function () {
                var selectedText = $(this).val();
                if (selectedText != null && selectedText != '') {
                    $.getJSON('@Url.Action("Text","Admin")', { Id: selectedText }, function (text) {

//                        var textSelect = $('#Text');
//                        textSelect.empty();
//                        $("#Text")[0].value = text;
                        CKEDITOR.instances['editor1'].setData(text);
                        //                $.each(text, function (index, employee) {
                        //                    textSelect.append($('<option/>', {
                        //                        value: employee.Value,
                        //                        text: employee.Text
                        ////                    }));
                        //                });
                    });

                }
            });
</script>
    </fieldset>
     <p>
            <input type="button" value="Save"  onclick="Save()"/>
        </p>
} 

2 个答案:

答案 0 :(得分:1)

尝试更换:

var editor_data1 = $('editor1').val();

使用:

var editor_data1 = $('#editor1').val();
如果你想要执行id selector,你应该在jQuery中加上#作为前缀。

您使用的.val()方法也会返回一个字符串。我不知道CKEditor,但我非常怀疑字符串类型有getHtml

你可能意味着:

var editor_data = CKEDITOR.instances['editor1'].getData();

此外,您似乎订阅了id="Id"的某些DOM元素的更改事件:

$('#Id').change(...);

我在DOM中看不到任何这样的元素。你确定你不是故意的:

$('#editor1').change(...);

或其他一些元素?也许下拉?

您似乎在使用jQuery语法时遇到了一些问题。我建议你阅读一些教程。

答案 1 :(得分:0)

Save()函数上方的行将在解析文档时执行。那时,您的CKEditor可能还没有存在。要解决此问题,请移至Save()内,如下所示:

        function Save() {
        var editor_data1 = $('editor1').val(); 
        var editor_data = editor_data1.getHtml();
        var url = '@Url.Action("EditText", "Admin")';
        var data = { commentText: editor_data };
        alert(editor_data);
        $.post(url, data, function(result) {  });