0

这是作业,现在就宣布。

我必须通过 XML 加载“测验”(成功完成),并生成 td 单元格(完成)以显示所述问题(未完成,改为测试数据)。

这是我的javascript源代码

var selected;
var $cell;
var $cell2;
$(document).ready(function() {
    $("#getTitle").click(function() {
        selected = $("#quizname>option:selected").text();
        $("#quiztitle").html(selected+" Quiz");
        $("#quiz2").html(selected+" Quiz");
        murl = "quizdata.xml";
        $.ajax({type:"GET",
            url:murl,
            success:loaddata,
            cache:false,
            dataType:"xml",
            data:selected,
            error:ajaxerror
        });
    });
});

var $xml;
function loaddata(respobj,status,xhr) {
    //to do:
    //dynamic td creation for each xml question
    $("#questions").empty();
    $xml = $(respobj).find("quiz:contains("+selected+")");
    for (var i=0;i<$xml.attr("qnum");i++) {
        $('<tr>').attr("id","questions"+(i+1)).appendTo("#questions");

        $("<td>").attr("id","question"+(i+1)).appendTo("#questions"+(i+1));
        $("#question"+(i+1)).html((i+1)+". "+$xml.find("question[num='"+(i+1)+"']").text());
        $("#question"+(i+1)).addClass("th.thirty");

        $("<td>").attr("id","blank_question"+(i+1)).appendTo("#questions"+(i+1));
        $("#blank_question"+(i+1)).addClass("question");
        $("#blank_question"+(i+1)).html("Put Answer Here");

        $("<td>").attr("id","answer"+(i+1)).appendTo("#questions"+(i+1));
        $("#answer"+(i+1)).addClass("question");
        $("#answer"+(i+1)).html((i+1)+". "+$xml.find("answer[num='"+(i+1)+"']").text());

        $("#answer"+(i+1)).click(selectCell);
    }
}

function selectCell() {
    $cell = $(this);
    $cell.css("background-color","red");
    for (i=0;i<$xml.attr("qnum");i++) {
        $("#blank_question"+(i+1)).click(function() {
            $cell2 = $(this);
            $cell.css("background-color","lightgray");
            temp_text = $cell.text();
            temp_id = $cell.attr("id");
            $cell.attr("id",$cell2.attr("id"));
            $cell.text($cell2.attr('id'));
            $cell2.attr("id",temp_id);
            $cell2.text(temp_id);
            $("#answer"+(i+1)).unbind("click");
            $("#answer"+(i+1)).bind("click", function() {
                selectCell();
            });
        });
    }
}

function swapCell() {
    $cell.css("background-color","lightgray");
    alert($(this).attr("id"));
}

function ajaxerror(xhr,status,error) {
    $("td#desc").attr("class","");
    $("td#desc").html("xhr="+xhr);
    $("td#desc").append("<br /><br />status="+status)
    $("td#desc").append("<br /><br />error="+error);
}

我的问题是(在此处尝试:HomeWork Link)第一次单击第一个单元格时,将其与第二个单元格交换,它可以工作。但是,它仅适用于每次其他点击和交换,这让我认为存在一些绑定问题或焦点问题,因为我需要它无缝交换。代码中是否存在明显错误,或者我是否缺少特定的焦点/绑定事件?

谢谢!

编辑:交换后显示的值是单元格 ID 属性

4

1 回答 1

0

在谷歌搜索“jquery recursive .click binding”后,我发现不是 .click() 我将其更改为 .live() 并且效果很好。

于 2013-03-04T03:11:36.283 回答