这可能是一个noob问题,但是:
我构建了一个测验,然后决定用把手模板加载我的所有问题,问题是在模板插入到位后,我无法用jquery或其他任何东西操纵dom。这是我的Handlebars功能:
mQ.loadQuestion = function () {
"use strict";
Handlebars.registerHelper("fill", function (data, options) {
return options.fn(data[mQ.counter]);
});
$('#questions').remove();
$('#answersFrame').remove();
var templateScript = $('#fillQuestions').html(),
theTemplate = Handlebars.compile(templateScript);
$.getJSON("quiz.json", function (quiz) {
$('#next').before(theTemplate(quiz));
});
};
好吧我用这个函数改变了问题,问题变化很好,测验工作正常,但是在插入新的html模板之后,好像它的所有类和id都消失了,例如在我调用了把手功能之后并尝试操纵dom,没有任何反应。例如:
mQ.loadQuestion();
$('.choices').show('slow');
这里的“选项”是该html模板中的一个类名,但是在我调用Handlebars函数之后,我再也无法选择和操作新加载的html,即如果选择的显示没有,我就无法慢慢显示它们,或者如果我想选择一个输入无线电,我不能这样做,就好像dom在加载模板后停止工作。例如,如果模板加载空单选按钮,并且我想在模板加载后选择其中一个,我就不能这样做。希望我明白我的问题。谢谢。
答案 0 :(得分:0)
在DOM中实现的一个,车把模板HTML被视为与任何其他HTML一样,并且是可编辑的。
如果没有例子,很难得到准确的答案。但是,您的模板是在getJSON调用之后注入的。这是一个AJAX调用(异步),所以如果你立即查询" .choices",它就不会在DOM中找到它,因为AJAX调用还没有完成并且Handlebars模板还没有被注入。尝试将fadeIn调用放在AJAX回调中,例如:
mQ.loadQuestion = function () {
"use strict";
Handlebars.registerHelper("fill", function (data, options) {
return options.fn(data[mQ.counter]);
});
$('#questions').remove();
$('#answersFrame').remove();
var templateScript = $('#fillQuestions').html(),
theTemplate = Handlebars.compile(templateScript);
$.getJSON("quiz.json", function (quiz) {
//JSON Callback. Will call this function and the run the code
//Below once the JSON is available.
$('#next').before(theTemplate(quiz));
$('.choices').show('slow');
});
};