Javascript 如何使用jQuery成功地选择一个新创建的带有小胡子的元素?

Javascript 如何使用jQuery成功地选择一个新创建的带有小胡子的元素?,javascript,mustache,Javascript,Mustache,我正在基于一个小胡子模板生成一些HTML,例如: function generate_hello(element) { var template = jQuery('#hello_template'); return mustache(template.html(), { tooltip: 'Hello' }); ..nothing gets executed here, no selecting in jQuery, no nothing. }

我正在基于一个小胡子模板生成一些HTML,例如:

function generate_hello(element) {
    var template = jQuery('#hello_template');
    return mustache(template.html(), {
        tooltip: 'Hello'
    });
    ..nothing gets executed here, no selecting in jQuery, no nothing.
}
因此,元素:

<input type='button' value='Hello' class='show'>
这也不是:

$('.show');
这是理所当然的。返回表示停止执行。 现在,我在返回之前和之后添加了选择器,删除了返回(不能删除返回,因为这样它就不会输出HTML),但没有任何效果


我如何选择新创建的元素来使用它?

您的问题是,您试图在动态添加的元素上附加事件,这比在正常例程中添加事件需要多一点时间

你就是这样做的

$('body').on('click', '.show', function() {
  alert("Clicked on element with class show")
});
更新:

function generate_hello(element) {
    var template = jQuery('#hello_template');
    return mustache(template.html(), {
        tooltip: 'Hello'
    });
    ..nothing gets executed here, no selecting in jQuery, no nothing.
}
这里什么都不执行,jQuery中没有选择,什么都没有

这是因为您正在从函数返回。并且在return语句之后不执行任何操作。在其他函数中编写代码,并在
generate\u hello
函数之后调用它

差不多

generate_hello();
someOtherFunction

请检查评论以及其他答案,以获取有价值的信息。

问题不在于代码,而在于我如何设计我的系统,呃,逻辑

此代码在包装函数(一级以上)中调用,如下所示:

当然,我只是简单地(在我的
包装器
中)附加一个html字符串(
标记
),这显然不允许在我的原始函数中执行任何操作,,因为它只输出而已。

它从我的HTML中获取数据:

<div class="test" data-callback="generate_markup">

我想这里的教训是:控制你的逻辑,知道每个函数返回什么以及它是如何处理的。

你怎么知道
$('.show')
不起作用?您是否尝试过检查
$('.show').lengh等等?@GeorgeBailey是的!我尽了我应有的努力,但我会再努力的。编辑:不,不行。
返回之后的任何内容都不会执行(应该是这样的,但我想知道,我是否应该将mustache例程解耦到另一个函数中?选择它后,您想实现什么?添加任何事件等?@GeorgeBailey Correct!这基本上添加了一个按钮,然后我将操纵它的值,执行一些AJAX操作,等等。您确定新创建的元素是实际的吗在DOM中是什么?这是一个很好的注释,但不幸的是,我的问题实际上是,在我的胡子返回后,没有任何东西会执行。是的,你大约90%是对的,只是少了一点香料。看到我的答案了。
var markup = $(window[callback](e.currentTarget));
markup.attr('data-screen', callback);
wrapper.append(markup);
<div class="test" data-callback="generate_markup">
var markup = $(window[callback](e.currentTarget));
markup.attr('data-screen', callback);
wrapper.append(markup);
secondary_callback_after_markup_is_done();