У меня есть приложение 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, поэтому я не знаю, как отладить эту проблему.
Что я сделал не так? Пожалуйста, любая помощь приветствуется.