【问题标题】:Clean up repetitive JavaScript code清理重复的 JavaScript 代码
【发布时间】:2011-06-22 17:00:46
【问题描述】:

我使用 JavaScript 创建了一个“向导”,并根据人们的回答将您带到某些结果 div。它按我想要的方式工作,但是这段代码非常重复。有没有办法清理这段 JavaScript 代码?

$(".hidden").hide();

$(function() {

    $("#start_button").click(function(){
            $("#wizard_start").hide();
            $("#Q1").show();
    });

$("#reset").click(function(){
        $("#wizard_start").show();
        $(".hidden").hide();
        $(":input").not(":button, :submit, :reset, :hidden").each( function() {
        this.value = this.defaultValue;     
});

});

$("#q1_button").click(function(){
        if ($("input[value='q1_1']:checked").val()){
            $("#Q2").show();
            $("#Q1").hide();
        }
        else if ($("input[value='q1_2']:checked").val()) {
            $("#results1").show();
            $("#Q1").hide();
        }
        else if ($("input[value='q1_3']:checked").val()) {
            $("#Q3").show();
            $("#Q1").hide();
        }
});

$("#q2_button").click(function(){
        if ($("input[value='q2_1']:checked").val()){
            $("#results2").show();
            $("#Q2").hide();
        }
        else {
            $("#results3").show();
            $("#Q2").hide();
        }


});

    $("#q3_button").click(function(){
        if ($("input[value='q3_1']:checked").val()){
            $("#Q4").show();
            $("#Q3").hide();
        }
        else {
            $("#results1").show();
            $("#Q3").hide();
        }

});

$("#q4_button").click(function(){
        if ($("input[value='q4_1']:checked").val()){
            $("#Q5").show();
            $("#Q4").hide();
        }
        else {
            $("#Q6").show();
            $("#Q4").hide();
        }

});

$("#q5_button").click(function(){
        if ($("input[value='q5_1']:checked").val()){
            $("#results4").show();
            $("#Q5").hide();
        }
        else {
            $("#Q7").show();
            $("#Q5").hide();
        }

});

$("#q6_button").click(function(){
        if ($("input[value='q6_1']:checked").val()){
            $("#Q8").show();
            $("#Q6").hide();
        }
        else {
            $("#Q9").show();
            $("#Q6").hide();
        }

});

$("#q7_button").click(function(){
        if ($("input[value='q7_1']:checked").val()){
            $("#results4").show();
            $("#Q7").hide();
        }
        else {
            $("#results5").show();
            $("#Q7").hide();
        }

});

$("#q8_button").click(function(){
        if ($("input[value='q8_1']:checked").val()){
            $("#results6").show();
            $("#Q8").hide();
        }
        else {
            $("#results7").show();
            $("#Q8").hide();
        }

});

$("#q9_button").click(function(){
        if ($("input[value='q9_1']:checked").val()){
            $("#results8").show();
            $("#Q9").hide();
        }
        else if ($("input[value='q9_2']:checked").val()) {
            $("#Q10").show();
            $("#Q9").hide();
        }

        else if ($("input[value='q9_3']:checked").val()) {
            $("#results3").show();
            $("#Q9").hide();
        }

});

$("#q10_button").click(function(){
        if ($("input[value='q10_1']:checked").val()){
            $("#results9").show();
            $("#Q10").hide();
        }
        else {
            $("#results3").show();
            $("#Q10").hide();
        }

});

$("#q2_backbutton").click(function(){
    $("#Q1").show();
    $("#Q2").hide();
});
$("#q3_backbutton").click(function(){
    $("#Q1").show();
    $("#Q3").hide();
});
$("#q4_backbutton").click(function(){
    $("#Q3").show();
    $("#Q4").hide();
});
$("#q5_backbutton").click(function(){
    $("#Q4").show();
    $("#Q5").hide();
});
$("#q6_backbutton").click(function(){
    $("#Q4").show();
    $("#Q6").hide();
});
$("#q7_backbutton").click(function(){
    $("#Q5").show();
    $("#Q7").hide();
});
$("#q8_backbutton").click(function(){
    $("#Q6").show();
    $("#Q8").hide();
});
$("#q9_backbutton").click(function(){
    $("#Q6").show();
    $("#Q9").hide();
});
$("#q10_backbutton").click(function(){
    $("#Q9").show();
    $("#Q10").hide();
});

});

http://jsfiddle.net/dswinson/PXp7c/56/

另外,有没有办法在结果 div 上添加一个“返回开始”按钮,让您回到开头并重置所有单选按钮?

谢谢!

【问题讨论】:

  • 实时链接是一个很好的辅助问题,但也总是发布相关代码在问题中(即使它是重复的)。两个原因。 1.人们不应该通过链接来帮助你。 2. StackOverflow 不仅是为您现在提供的资源,也是为将来遇到类似问题的其他人提供的资源。外部链接可能会被移动、修改、删除等。通过确保问题中包含相关代码,我们可以确保问题(及其答案)在合理的时间内保持有用。
  • 看来这属于codereview
  • 我已将我的代码添加到问题中,但感谢您的链接。我会在那里发布我的问题。

标签: javascript wizard repeat


【解决方案1】:
$(".hidden").hide();

这实际上是完全没有必要的。 我建议您改为添加以下 CSS 规则:

.hidden{
  display : none;
}

但这并不是你的代码有问题的全部,我会说实话它很糟糕。如果你努力学习 jQuery,那就更好了。 你不能指望这里的人们花时间优化由某个向导生成的代码。

我的回答并不是很有帮助,但您需要自己付出更多的努力才能获得体面的帮助。

编辑 您的每个功能似乎都存在细微差别,因此难以概括。 我会给你一个建议,写一个类似的函数

function switch_question(current_question,next_question){
  $('#Q'+current_question).hide();
  $('#results'+current_question).show().hide(10000);
  $('#Q'+next_question).show();
};

现在,您可以将问题编号传递给函数并调用它,而不是通过键入整个内容来更改下一个问题。

当然还有更多的优化,你必须尽可能地重构代码。 很抱歉对你太苛刻了,我以为你使用了一些代码生成工具。 希望这更有帮助。

【讨论】:

  • 它不是由某些向导生成的,我自己编写了代码。就像我说的那样,我不是 jQuery 的专家级程序员,这就是为什么我希望至少能在查看哪里或应该查看哪种代码方面获得一些帮助。我已经在网上搜索了很长时间,试图找到一个与我希望我的工作方式相似的代码,但我做不到。我看过 1 个电台被选中,1 个 div 节目。我可以这样做,但我的代码需要工作的方式似乎有点复杂。我只是说如果你能告诉我我应该寻找什么而不是仅仅告诉我我需要帮助会更有帮助。
  • 在这种情况下,它毕竟不是那么糟糕。我会用一些你可以改进的代码来更新我的答案。
  • 我知道我可能会问很多,但是如果有人可以看看我的代码现在的工作方式(在我发布在代码下的演示链接中)并告诉我他们将如何进行编程那会很有帮助。也许 jQuery 不是有效完成这项工作的最佳方式,而使用另一种编程语言可以做得更好。我不知道。但是,如果我有某种方向可走,那会有所帮助。谢谢!
  • 你可以用 jQuery 来做这一切,使用它没有任何意义。关键必须将相似的代码组合在一起,然后查看可能进行概括的地方。而且你要求的并不多。我不应该这么假设。再次道歉。
  • 谢谢。是的,我认为我编写这段代码的问题是因为有太多细微的差异,我觉得我无法概括它,我必须具体说明每个单选按钮带你去哪个问题。 next_question 取决于在它之前选择了哪个单选按钮。所以如果选择了radio 1,它可以带你到问题2,radio 2 可以带你到问题5,radio 3 可以带你到问题6。它会继续这样直到到达结果页面。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2012-09-28
  • 2013-09-16
  • 2015-03-10
  • 2011-04-04
相关资源
最近更新 更多