Вставка кода проверки JQuery в DOM - PullRequest
0 голосов
/ 24 октября 2011

У меня есть приложение ASP.NET MVC3, и у меня есть задача вставить некоторый HTML-код (некоторую форму) и код Javascript (главным образом, проверку jQuery для вставленной формы) в DOM веб-страницы - HTML и Код Javascript возвращается через вызовы Ajax:

         var id = jQuery(this).attr("data-id");
         var querystring = "id=" + id;
         jQuery.ajax({
             type: "GET",
             url: "Home/GetEditViewHTMLById",
             data: querystring,
             dataType: "html"
         }).done(function (msg_html) {
             jQuery.ajax({
                 type: "GET",
                 url: "Home/GetEditViewJavascriptById",
                 data: querystring,
                 dataType: "script"
             }).done(function (msg_javascript) {
                 jQuery("#content").html(msg_html); // inserting the HTML

                 var script = document.createElement("script");
                 script.type = "text/javascript";
                 script.text = msg_javascript;
                 document.body.appendChild(script); // inserting the Javascript - doesn't work
                 Edit(); // <- this function would be in the inserted Javascript code
             });
         });

Переменная msg_javascript содержит код Javascript. Если я вызываю alert, я вижу результат вызова Ajax:

       function Edit(){
          jQuery("#plugin").validate( { errorElement: 'div' } );
          jQuery("#sum1").rules("add", { required: true, messages: { required: "!" }  });
          jQuery.validator.addMethod("regex_sum1",
                  function (value, element, regexp) {
                      var check = false;
                      var re = new RegExp(regexp);
                      return re.test(value);
                  },
                  "Wrong number format!");
          jQuery("#sum1").rules("add", { regex_sum1: "^[1-9][0-9]*$" });
          jQuery("#sum2").rules("add", { required: true, messages: { required: "!" }  });
          jQuery.validator.addMethod("regex_sum2",
                  function (value, element, regexp) {
                      var check = false;
                      var re = new RegExp(regexp);
                      return re.test(value);
                  },
                  "Wrong number format!");

          jQuery("#email").rules("add", { required: true, messages: { required: "!" }  });

          jQuery.validator.addMethod("regex_email",
                  function (value, element, regexp) {
                      var check = false;
                      var re = new RegExp(regexp);
                      return re.test(value);
                  },
                  "Wrong e-mail format!");
          jQuery("#email").rules("add", { regex_email: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$" });
          jQuery('input').blur(function(){
                          if(!jQuery(this).valid()){
                             return false;
                         }
                      });

          function calculate(){
               return (Number(jQuery('#sum1').val())*(Number(jQuery('#sum2').val())+0.5));
          }
          function getFields(){
               return ["sum1","sum2"];
          }
          function validateRange(value){
               return 1000 <= value && value <= 10000;
          }}

Если я верну следующую функцию с сервера:

          function Edit(){ 
                alert("okay");
          }
  • все в порядке, и предупреждение выполняется. Если я верну вышеупомянутую функцию Javascript, она не будет выполнена, и я не смогу увидеть тег script в Firebug, поэтому я не знаю, как отладить эту проблему. Что я сделал не так? Пожалуйста, любая помощь приветствуется.

1 Ответ

1 голос
/ 24 октября 2011

Javascript не запускается в возвращаемой переменной, вы должны выполнить ее:

eval(msg_javascript);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...