jQuery createElement(“script”)问题

时间:2013-07-10 12:34:37

标签: jquery dynamic createelement

我正在使用document.createElement("script");来生成脚本标记,并在我的html头部显示一些代码,点击按钮。整个代码:

    //dynamic
$(document).ready(function() {


var AddButton       = $("#AddMoreBox"); //Add button ID

var FieldCount=0; //to keep track of text box added

var s = document.createElement("script");

$(AddButton).click(function (e)  //on add input button click
{
        FieldCount++; //text box added increment

        s.type = "text/javascript";
        s.text= '$(function(){alert('+ FieldCount +')});';

        $("head").append(s);

        x++; //text box increment
return false;
});

});

我注意到每次点击按钮时生成的脚本都会被更大的数字替换掉。有没有什么方法可以让它们不被替换,但是在它的生成中,先前生成的脚本会保留,而新的脚本会在之前的位置停留在前面吗?

我不知道为什么,我的警报在第二次创建脚本后没有显示。我错过了什么或什么?

以下是jsfiddle的情况:http://jsfiddle.net/dzorz/6F7jR/

2 个答案:

答案 0 :(得分:3)

http://jsfiddle.net/N79tH/

您已在单击处理程序之外声明了您的脚本元素,因此正在重用它,在处理程序中移动var s声明以获得所需的效果。像这样:

$(document).ready(function () {

    var AddButton = $("#AddMoreBox"); //Add button ID
    var FieldCount = 0; //to keep track of text box added

    $(AddButton).click(function (e) //on add input button click
    {
        var s = document.createElement("script");
        FieldCount++; //text box added increment
        s.type = "text/javascript";
        s.text = '$(function(){alert(' + FieldCount + ')});';
        $("head").append(s);
        x++; //text box increment
        return false;
    });

});

答案 1 :(得分:1)

试试这个

http://jsfiddle.net/6F7jR/2/

//dynamic
$(document).ready(function() {


var AddButton       = $("#AddMoreBox"); //Add button ID

var FieldCount=0; //to keep track of text box added



$(AddButton).click(function (e)  //on add input button click
{
    var s = document.createElement("script");//use here because every time create new element
        FieldCount++; //text box added increment

        s.type = "text/javascript";
        s.text= '$(function(){alert('+ FieldCount +')});';

        $("head").append(s);

        //x++; //text box increment because x is not defined
return false;
});

});