0

ここに、ユーザーがオプションと回答を選択できるアプリケーションがあります。質問を説明する最良の方法は、アプリケーション自体を使用して、何が起こっているかを確認できるかどうかです。申請書は以下の手順に従ってください。

  • ステップ1:アプリケーションを開くと、[グリッドを開く]リンクが表示され、それをクリックしてオプションタイプを選択します。オプションを選択すると、下部に回答ボタンが表示されます。たとえば、選択したオプションが「5」の場合、5つの回答ボタン「A-E」が表示されます。選択したオプションが8の場合、8つの回答ボタン「AH」が表示されます。

これで問題ありません。しかし、私が抱えている問題は、ユーザーが以前のオプションを追加したい場合です。以下の手順をご覧ください。

  • ステップ2:ページを更新する
  • ステップ3:左側に緑色のプラスボタンが表示されます。それをクリックすると、モーダルウィンドウが開きます。
  • ステップ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

あなたの質問を完全に理解しているかどうかはよくわかりませんが、アプリケーションを数回試したところ、理解できたと思います。データベースから結果を読み込む->フィールドに結果を入力しますか?

とにかく、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 に答える
0

編集:「これ」はオブジェクトとして渡す必要がありました。編集したコードを試してください

このように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)を使用して呼び出すと、使用するデータがわかります。それがソルバーだと思います。その関数をもう一度実行するだけです(両方のボタンで機能するようにするには、少し変更する必要があるかもしれません)

これを行うためには。1つは.gridBtns用、もう1つは.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 に答える