0

在这里有一个应用程序,用户可以在其中选择他们的选项和答案。向您解释问题的最佳方式是您是否使用应用程序本身,以便您可以看到正在发生的事情。请按照以下步骤申请。

  • 步骤1:当你打开应用程序时,你会看到“打开网格”链接,点击它并选择一个选项类型,选择一个选项后,它会在底部显示答案按钮。例如,如果您选择的选项是“5”,它将显示 5 个答案按钮“A - E”,如果选择的选项是 8,它将显示 8 个答案按钮“AH”。

现在这很好。但我遇到的问题是用户是否想添加以前的选项。请看以下步骤:

  • 第二步:刷新页面
  • 第三步:你会在左侧看到一个绿色的加号按钮,点击它,这将打开一个模态窗口。
  • 第 4 步:在搜索框中输入“AAA”,然后单击“提交”按钮,它将显示数据库中的行。
  • 步骤 5:请通过单击“添加”按钮选择一行,模式窗口将关闭,如果您查看右侧的答案和选项控件,您可以看到选项类型文本框和答案数量文本框出现,但没有出现“应答”按钮。

所以我的问题是如何在用户单击“添加”按钮后显示“回答”按钮?

以下是控制单击“添加”按钮后发生的情况的函数:

function addwindow(numberAnswer,gridValues) { 

    if(window.console) console.log();

    if($(plusbutton_clicked).attr('id')=='mainPlusbutton') { 


        $('#mainNumberAnswerTxt').val(numberAnswer);
        $('#mainGridTxt').val(gridValues);
        } else { 
            $(plusbutton_clicked).closest('tr').find('input.numberAnswerTxtRow').val(numberAnswer);
            $(plusbutton_clicked).closest('tr').find('input.gridTxtRow').val(gridValues);
            }

    $.modal.close(); 
    return false;
} 

下面是存储答案按钮的代码(我需要调用什么才能显示答案按钮):

<table id="optionAndAnswer" class="optionAndAnswer">

...

<?php
    $a = range("A","Z");
?>

<table id="answerSection">
    <tr>

<?php
    $i = 1;
    foreach($a as $key => $val){
        if($i%7 == 1) echo"<tr><td>";
        echo"<input type=\"button\" onclick=\"btnclick(this);\" value=\"$val\" id=\"answer".$val."\" name=\"answer".$val."Name\" class=\"answerBtns answers answerBtnsOff\">";      
        if($i%7 == 0) echo"</td></tr>";
        $i++;
    }
?>
    </tr>
    <tr>
<td>
<input class="answerBtns answers" name="answerTrueName"  id="answerTrue"    type="button"   value="True"    onclick="btnclick(this);"/>
<input class="answerBtns answers" name="answerFalseName" id="answerFalse"   type="button"   value="False"   onclick="btnclick(this);"/>
<input class="answerBtns answers" name="answerYesName"   id="answerYes"     type="button"   value="Yes"     onclick="btnclick(this);"/>
<input class="answerBtns answers" name="answerNoName"    id="answerNo"      type="button"   value="No"      onclick="btnclick(this);"/>
</td>
</tr>
</table>
...
</table>

更新:

下面是从网格中选择选项后导入答案按钮的代码:

       $('.gridBtns').on('click', function()

    {

    appendAnswers(this);

});

function appendAnswers(t){
var clickedNumber = t.value;

        $(t).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
        $(t).closest('.option').siblings('.numberAnswer').find('.string').hide();



         $(t).closest('.option').siblings('.answer').find('.answers').each(function(index) {
            if (!isNaN(clickedNumber) && index < clickedNumber) {
                $(t).show();
                $(t).closest('.option').siblings('.numberAnswer').find('.string').hide();


         // show but don't change the value
         $(t).closest('.option').siblings('.numberAnswer').find('.answertxt').show();


            } else {

                $(t).hide();
                $(t).removeClass('answerBtnsOn');
                $(t).addClass('answerBtnsOff');

            }

            var $this = $(t);
             var context = $this.parents('.optionAndAnswer');
             console.log($this);


        });

        prevButton = clickedNumber;


            $(t).closest('.option').siblings('.noofanswers').find('.string').hide();     
            $(t).closest('.option').siblings('.noofanswers').find('.answertxt').show();


        getButtons();

    };
});



    function getButtons()
    {
        var i;
        if (initClick == 0) {
            for (i = 65; i <= 90; i++) { // iterate over character codes for A to Z
                $("#answer" + String.fromCharCode(i)).removeClass("answerBtnsOn").addClass("answerBtnsOff");

            }

            initClick = 1;
        }
        // code above makes sure all buttons start off with class answerBtnsOff, (so all button are white).
    }
4

4 回答 4

0

那么,当您单击网格中的选项时会触发什么?如果具有您要查找的属性的对象的名称是根据选项类型命名的:即“选项类型 4”是“op4”,那么,不是让“以前的问题”查询填充该字段,而是它将返回的值存储为 vars,然后在您单击弹出窗口中的选项时调用填充答案的相同函数:

optionPicked("op" + opType);

或者你怎么称呼它。

于 2012-07-05T23:08:54.043 回答
0

编辑:“this”需要作为对象传递,尝试编辑代码

像这样从onClick中拉出函数,然后像“getChoice(4);”一样调用它 当历史页面触发添加按钮时。

像这样重写:

function getChoice(obj){

    var clickedNumber = this.value;

    $(obj).closest('.option').siblings('.numberAnswer').find('.answertxt').show();
    $(obj).closest('.option').siblings('.numberAnswer').find('.string').hide();



     $(obj).closest('.option').siblings('.answer').find('.answers').each(function(index) {
        if (!isNaN(clickedNumber) && index < clickedNumber) {
            $(obj).show();
            $(obj).closest('.option').siblings('.numberAnswer').find('.string').hide();


     // show but don't change the value
     $(obj).closest('.option').siblings('.numberAnswer').find('.answertxt').show();


        } else {

            $(obj).hide();
            $(obj).removeClass('answerBtnsOn');
            $(obj).addClass('answerBtnsOff');

        }

        var $this = $(obj);
         var context = $this.parents('.optionAndAnswer');
         console.log($this);


    });


    getButtons();

}



$('.gridBtns').on('click', function(){

getChoice(this);
});
于 2012-07-05T23:23:45.130 回答
0

只需调用与单击 .gridBtns 相同的函数即可。将该函数作为他自己的函数,并使用属性 (this) 调用它,以便它知道要使用哪些数据。我想这就是求解器。只需再次运行该功能(也许您必须对其进行一些修改才能同时使用两个按钮)

为此。制作事件监听器,一个用于 .gridBtns,一个用于 .addBtn。

当调用 .gridBtns 或 .addBtns 时,只需在 eventlistener 中运行该函数:

$('.gridBtns').on('click', function(){
  appendAnswers(this);
});

并将您之前使用的函数修改为:

function appendAnswers(t){
  //t = this you defined in the onclick event
  //rest of your code here
}
于 2012-07-05T23:25:04.583 回答
0

我不太确定我是否完全理解你的问题,但我尝试了几次你的应用程序,我想我明白了:从数据库加载结果->用结果填充字段?

无论如何,我看到你正在使用 Jquery,所以我认为你应该能够使用 .html() 或 .append() 在 for 循环中添加每个按钮:(我假设你已经将答案按钮存储在一个数组中)。我很懒所以我通常用 ID 命名目标#ButtonHolder 是你的按钮。

var buttonhtml = ""; //I personally like to build the html then insert it. 
var lastchar = gridValues.charCodeAt(gridvalues.length-1);
for (i=65;i<=lastchar;i++) // 65 is the code for "A"
buttonhtml += "<input type=\"button\" onclick=\"btnclick(this);\" value=\""+String.fromCharCode(i)+"\" id=\"answer"+String.fromCharCode(i)+"\" name=\"answer"+String.fromCharCode(i)+"Name\" class=\"answerBtns answers answerBtnsOn\">";
$("#ButtonHolder").html(buttonhtml);

你有没有想过不使用onclick,而是使用JQuery 来处理带有类的点击?

编辑:

function addwindow(questionText,textWeight,numberAnswer,gridValues) { 



    if(window.console) console.log();

    if($(plusbutton_clicked).attr('id')=='mainPlusbutton') { 

        if( gridValues != "True or False" && gridValues != "Yes or No" )
{
   var myNumbers = {};
   myNumbers["A-C"] = "3";
   myNumbers["A-D"] = "4";
   myNumbers["A-E"] = "5";
//...
   myNumbers["A-Z"] = "26";
   gridValues = myNumbers[gridValues];
   $('#mainNumberAnswerTxt').show();

}
else{
   $('#mainNumberAnswerTxt').hide();
}

        $('#mainTextarea').val(questionText); 
        $('#mainTxtWeight').val(textWeight);
        $('#mainNumberAnswerTxt').val(numberAnswer);
        $('#mainGridTxt').val(gridValues);
        } else { 
            $(plusbutton_clicked).closest('tr').find('input.numberAnswerTxtRow').val(numberAnswer);


$(plusbutton_clicked).closest('tr').find('input.gridTxtRow').val(gridValues);

    var lastchar = gridValues.charCodeAt(gridValues.length-1); // getting the last charcode i.e. "A-D" -> "D" -> 68
   $(".ansBtns").removeClass("answerBtnsOn").addClass("answerBtnsOff"); // reset all the buttons to off *I think this works* 
    // 65 is the code for "A" Iterating each choice and activating it:
    for (i=65;i<=lastchar;i++)
    $("#answer"+String.charCodeAt(i)).addClass("answerBtnsOn");    
        $.modal.close(); 
        return false;
    } 
于 2012-07-05T22:55:56.043 回答