0

我正在使用 jquery,下面是我的代码,我的问题是无论什么点击事件都不起作用。

我可以使用正确的方法记录qidie 问题 idconsole.log(qid)

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 文件

  • jquery.min.js
  • jquery.mobile-1.2.0.min.js
4

4 回答 4

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);
}
于 2013-02-09T07:33:49.743 回答
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将绑定到被单击的元素,并且该元素可能没有该方法。

于 2013-02-09T07:38:46.810 回答
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);
        });
});
于 2013-02-09T07:47:50.930 回答
0

我认为它是事件委托数据 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

于 2013-02-09T07:48:02.937 回答