2012-02-11 3 views
0

В моем приложении MVC 3 я использую CKeditor для редактирования расширенного текста. Прямо сейчас мне нужно иметь возможность сохранять текст в БД с помощью HTML-тегов.Функция Javascript не запускается?

Проблема в том, что при нажатии кнопки «Сохранить» ничего не происходит.

Alert возвращает Undefined.

Вид:

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

ответ

1

Попробуйте заменить:

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

с:

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

в JQuery, если вы хотите выполнить id selector вы должны префикс его #.

Метод .val(), который вы используете, возвращает строку. Я не знаю с CKEditor, но я очень сильно сомневаюсь, что есть тип getHtml.

вероятно Вы имели в виду:

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

Также вы, кажется, подписавшись на событие изменения какого-либо элемента DOM с id="Id":

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

Я не вижу такой элемент в вашем DOM , Вы уверены, что это не значит:

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

или какой-либо другой элемент? Может быть, выпадающий список?

У вас возникли некоторые проблемы с синтаксисом jQuery. Я бы порекомендовал вам пройти некоторые учебные пособия.

+0

ttryed все, еще же ... Оповещение возвращает Неопределено, и я не могу найти где-нибудь в Интернете, где люди retrive данные из редактора CK – Timsen

+1

@Timsen, может быть, вы есть некоторые другие ошибки в вашем коде. Посмотрите на консоль отладки javascript. Как вы можете видеть в этом очень простом фрагменте кода, который вы опубликовали, я нашел так много проблем. Вы заставите меня сейчас скачать CKEDITOR и написать полный пример для вас? Я только готовился посмотреть фильм :-) –

+0

ну, я очень люблю javascripting (только начал его изучать). #id является идентификатором выпадающего списка, поэтому его нормально, эта часть работает правильно. – Timsen

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) { }); 
+0

предупреждение даже не появляется, поэтому он уже не работает в редакторе_data1 – Timsen