Javascript 嵌套脚本?

Javascript 嵌套脚本?,javascript,jquery,Javascript,Jquery,我有一个空div,如下所示: <div id="my-content"></div> /**IGNORE THIS**/ function makeButton(){ $('#my-content').html('<input type="button" value="Say hey" id="my-button" />'); } makeButton(){ $.ajax({ type: 'POST', ur

我有一个空div,如下所示:

<div id="my-content"></div>
/**IGNORE THIS**/
function makeButton(){
    $('#my-content').html('<input type="button" value="Say hey" id="my-button" />');
}
makeButton(){
    $.ajax({
        type: 'POST',
        url: 'ajax_images.php',
        data: {pageNr: pageNr},
        success:function(response) {
            //Loops the json and does something like this:
            var HTML = '<div id="thumbnail">;
            HTML += 'Response Stuff'
            HTML += '</div>';
            $('#my-content').html(HTML);
        } 
    });
}
工作完美,但是,当我在这之后为这个按钮做了一个触发器时,它看起来如下所示,它不响应按钮id

$(document).ready(function(){
    makeButton();
    $('#my-button').click(function(){
        alert('Hello!');
    });
});
我当然可以添加
$(文档)。准备好了吗。。。废话。。。警惕(“你好”)编码到makeButton函数的.html()中,但我想这不是真正的方法

在makeButton()准备好并添加了按钮后,我将如何告诉JS开始侦听单击

编辑: 好的,行了。很抱歉实际情况并非如此,而是类似的

makeButton()实际上是另一个通过ajax获取数据的函数,因此makeButton更像这样:

<div id="my-content"></div>
/**IGNORE THIS**/
function makeButton(){
    $('#my-content').html('<input type="button" value="Say hey" id="my-button" />');
}
makeButton(){
    $.ajax({
        type: 'POST',
        url: 'ajax_images.php',
        data: {pageNr: pageNr},
        success:function(response) {
            //Loops the json and does something like this:
            var HTML = '<div id="thumbnail">;
            HTML += 'Response Stuff'
            HTML += '</div>';
            $('#my-content').html(HTML);
        } 
    });
}
makeButton(){
$.ajax({
键入:“POST”,
url:'ajax_images.php',
数据:{pageNr:pageNr},
成功:功能(响应){
//循环json并执行如下操作:
var HTML=';
HTML+=“响应内容”
HTML+='';
$(“#我的内容”).html(html);
} 
});
}

抱歉让人困惑。

只需做一个简单的更改:

$(document).ready(function(){
    makeButton();
    $('#my-content').on('click', '#my-button', function(){
        alert('Hello!');
    });
});

加载页面后,
#我的按钮
进入DOM树时,需要委托事件。要了解jQuery中委托事件绑定的更多信息,请参阅。

只需做一个简单的更改:

$(document).ready(function(){
    makeButton();
    $('#my-content').on('click', '#my-button', function(){
        alert('Hello!');
    });
});

加载页面后,
#我的按钮
进入DOM树时,需要委托事件。要了解jQuery中委托事件绑定的更多信息,请参阅。

问题在于,您试图在元素存在之前绑定事件处理程序。Ajax调用是异步的

您可以从
$.ajax
调用返回promise对象:

function makeButton(){
    return $.ajax({
        // ...
    });
}
然后在Ajax调用成功时通过添加回调绑定事件处理程序:

makeButton().done(function() {
    $('#my-button').click(function(){
        alert('Hello!');
    });
});


或者,您也可以使用事件委派,如图所示。要进一步了解Ajax的工作原理,请看一看。

问题在于您试图在元素存在之前绑定事件处理程序。Ajax调用是异步的

您可以从
$.ajax
调用返回promise对象:

function makeButton(){
    return $.ajax({
        // ...
    });
}
然后在Ajax调用成功时通过添加回调绑定事件处理程序:

makeButton().done(function() {
    $('#my-button').click(function(){
        alert('Hello!');
    });
});


或者,您也可以使用事件委派,如图所示。要进一步了解Ajax的工作原理,请看一看。

我想您可以轻松地将click函数放在te ready括号的下面?您的问题在其他地方,代码运行正常。对我来说很好:什么不起作用?您是否多次调用make按钮?如果是这样,那可能是你的问题,因为你不能有多个ID具有相同的值。哦,该死的,好吧,我会进行编辑。这只是一个目前对我不起作用的示例,我将进行更新…@gubbfett请务必尝试您在此处发布的代码。这避免了浪费每个人的时间。我想你可以很容易地把点击功能放在te ready括号的下面?你的问题在其他地方,代码运行正常。对我来说很好:什么不起作用?您是否多次调用make按钮?如果是这样,那可能是你的问题,因为你不能有多个ID具有相同的值。哦,该死的,好吧,我会进行编辑。这只是一个目前对我不起作用的示例,我将进行更新…@gubbfett请务必尝试您在此处发布的代码。这样可以避免浪费每个人的时间。先生,你让我高兴极了!谢谢先生,你让我高兴极了!谢谢