我正在使用jquery,下面是我的代码,我的问题是无论点击事件不起作用。
我可以使用qid
正确
console.log(qid)
即问题ID
function prepareQuestionHtml(questionList){
var questions = "";
for(var i = 0; i < questionList.length; i++){
var questionId = questionList[i].qid;
questions += "<div class='ui-link qst' id='" + questionId + "' >" + questionList[i].qst + "</div>";
(function () {
var qid = questionId;
console.log(qid);
$("#" + qid).click(function(){
console.log("aaaaa");
openAnswer(localStorage.selected_category, qid);
});
})();
}
$("#category-content").html(questions);
}
function openAnswer(category, questionId)
{
console.log(category, questionId);
}
这可能是什么问题?单击链接即使语句console.log("aaaaa");
也未到达。
编辑:
我正在使用以下两个JS文件
答案 0 :(得分:1)
试试这个:
function prepareQuestionHtml(questionList){
var questions = "";
for(var i = 0; i < questionList.length; i++){
var questionId = questionList[i].qid;
questions += "<div class='ui-link qst' id='" + questionId + "' >" + questionList[i].qst + "</div>";
}
$("#category-content")
.html(questions)
.on('click', 'ui-link', function(){
var $this = $(this)
, qid = $this.attr('id')
;//var
openAnswer(localStorage.selected_category, qid);
})
;//#category-content
}
function openAnswer(category, questionId)
{
console.log(category, questionId);
}
答案 1 :(得分:1)
我已将您的代码缩短为:
var questions = '';
for(var i = 0; i < questionList.length; i++){
var questionId = questionList[i].qid;
questions += "<div class='ui-link qst' id='" + questionId + "' >" + questionList[i].qst + "</div>";
// attach click handler to `#questionId`
}
$("#category-content").html(questions);
这里的问题是您尝试在将节点插入之前将点击处理程序附加到DOM中。
快速破解:
(function (qid) {
console.log(qid);
$("#category-content").on('click', "#" + qid, function() {
console.log("aaaaa");
openAnswer(localStorage.selected_category, qid);
});
})(questionId);
但是,我建议单击处理程序:
$('#category-content').on('click', '.qst', function() {
// handle the click here
});
我不确定您使用this.openAnswer()
的原因。默认情况下,this
将绑定到被单击的元素,并且该元素可能没有该方法。
答案 2 :(得分:0)
这有更好的工作机会
function openAnswer(category, questionId)
{
console.log(category, questionId);
}
$(function () {
var questionList = {};
var container = $("#category-content")
for(var i = 0; i < questionList.length; i++){
var questionId = questionList[i].qid;
container.append("<div class='ui-link qst' id='" + questionId + "' >" + questionList[i].qst + "</div>");
}
container.on('click', '.qst',function() {
console.log("aaaaa");
openAnswer(localStorage.selected_category, this.id);
});
});
答案 3 :(得分:0)
我认为它是event delegation和data API
的最佳候选人function prepareQuestionHtml(questionList){
var questions = '';
for(var i = 0; i < questionList.length; i++){
var questionId = questionList[i].qid;
questions += '<div data-qid="' + questionId + '" class='ui-link qst' id='' + questionId + '' >' + questionList[i].qst + '</div>';
}
$('#category-content').html(questions);
}
$(function(){
$('#category-content').on('click', '.qst', function(e){
openAnswer(localStorage.selected_category, $(e.currentTarget).data('qid'));
});
});
function openAnswer(category, questionId) {
console.log(category, questionId);
}
这里我们向容器节点注册单击事件,并监听.qst
元素中的任何点击。点击发生时,我们会获取元素中存储的qid
数据(data-qid
)。