1

ユーザーがボタンをクリックすると、テキストボックスに値が表示され、「#btn」ボタンがクリックされた後に別の関数へのトリガーを実行する関数があります。

function addwindow(numberAnswer, gridValues, btn) { 
    $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);
    $('#btn'+gridValues).trigger('click');       
 }

今、私がやりたいことは次のとおりです。

  1. ユーザーが「追加」ボタンをクリックした場合、「回答数」列の数字をテキストボックスに表示するか、addwindow()関数からこれを実行します。

    $('#mainNumberAnswerTxt').val(numberAnswer).data('data-ignore',true);

  2. ユーザーが#btn+gridValuesボタンをクリックした場合は、現在オンになっているボタンの数のテキストボックスに数を表示するか、次のコードを実行します。

    if ($('#mainNumberAnswerTxt').data('data-ignore') != true) { $('.answertxt', context).val(context.find('.answerBtnsOn').length > 0 ? context.find('.answerBtnsOn').length : 0); }

問題は、ステップ 1 が正常に機能することです。ユーザーが [追加] ボタンをクリックした後、テキスト ボックスの [回答数] 列の数が表示されます。

問題はステップ 2 です。ユーザーがボタンをクリックした後、現在オンになっているボタンの数に正しい数が表示され#btn+gridValuesません。テキスト ボックスの数が変更されないだけです。

なぜこれが起こっているのか、どうすれば修正できるのか誰か知っていますか?

デモ:

これがアプリケーションのデモです。以下の手順に従ってください。

ステップ 1: 左側に緑色のプラス ボタンが表示されます。それをクリックすると、モーダル ウィンドウが開きます。ステップ 2: モーダル ウィンドウに検索バーがあり、「AAA」と入力して検索を送信すると、一連の行が表示されます。ステップ 3: 最後の行の [回答数] 列の下に数字 4 が含まれていることがわかります。この行の [追加] ボタンをクリックすると、モーダル ウィンドウが閉じます。

テキスト ボックスに数字 4 が表示されていることがわかります。これは、行を追加したときの [回答数] 列の下の行内の数字であったため、問題ありません。

しかし、以下が問題です。

ステップ 4: 「Open Grid」リンクをクリックしてボタン 3 を選択すると、下の文字ボタンが AC に変わり、文字「B」のみがオンになります。

テキストボックスには、ボタンが1つしかオンになっていないため、番号1が表示されるはずですが、この番号は表示されず、それが私が抱えている問題です。

この問題はどのように修正できますか?

4

2 に答える 2

2

問題は、データ属性を false に設定している$('#mainNumberAnswerTxt')が、入力に対してチェックしているという事実から発生thisします(クリックで)。

1つの解決策は、次のテストを行うことですif ($('#mainNumberAnswerTxt').attr('data-ignore') != true)

編集

無視プロセスが 1 回だけ実行されるようにするには (モーダル後にグリッドがリロードされるとき)、テスト後にブロック内の内容を変更する必要があります。

if ($('#mainNumberAnswerTxt').data('ignore') != true) {
    $('.answertxt', context).val(context.find('.answerBtnsOn').length > 0 ? context.find('.answerBtnsOn').length : 0);
} else {
    /*reset the ignore flag*/
    $('#mainNumberAnswerTxt').data('ignore',false);
}

EDIT2

主な問題は、$('#mainNumberAnswerTxt').val(numberAnswer)設定後に再影響することです。ignore属性を介してそれを無視しようとしています。

私がアドバイスすることは、その属性のすべての出現を削除し、次の関数を変更することです

function addwindow(questionText,textWeight,numberAnswer,gridValues,reply,btn) {
    var answers = $.map(btn.split(''),function(chr){ return "#answer"+chr; }).join(', ');
    if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
        var myNumbers = {};
        myNumbers["A-C"] = "3";
        myNumbers["A-D"] = "4";
        myNumbers["A-E"] = "5";
        myNumbers["A-F"] = "6";
        myNumbers["A-G"] = "7";
        gridValues = myNumbers[gridValues];
        $('#mainNumberAnswerTxt').show();
        $('#mainNumberAnswerTxt').val(numberAnswer).data('ignore',true);
        $('#mainGridTxt').val(gridValues).parent().append($('.optionTypeTbl'));
        $('#btn'+gridValues).trigger('click');
        $('.answers.answerBtnsOn').removeClass('answerBtnsOn').addClass('answerBtnsOff');
        $(answers).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
    }
    $.modal.close();
    return false;
} 

に :

function addwindow(questionText,textWeight,numberAnswer,gridValues,reply,btn) {
    var answers = $.map(btn.split(''),function(chr){ return "#answer"+chr; }).join(', ');
    if($(plusbutton_clicked).attr('id')=='mainPlusbutton') {
        var myNumbers = {};
        myNumbers["A-C"] = "3";
        myNumbers["A-D"] = "4";
        myNumbers["A-E"] = "5";
        myNumbers["A-F"] = "6";
        myNumbers["A-G"] = "7";
        gridValues = myNumbers[gridValues];
        $('#mainNumberAnswerTxt').show();
        $('#mainGridTxt').val(gridValues).parent().append($('.optionTypeTbl'));
        $('#btn'+gridValues).trigger('click');
        /* moved the following line below the click simulation, 
           hence its value will be changed regardless of what happened during the click simulation*/
        $('#mainNumberAnswerTxt').val(numberAnswer);
        $('.answers.answerBtnsOn').removeClass('answerBtnsOn').addClass('answerBtnsOff');
        $(answers).addClass("answerBtnsOn").siblings().addClass('answerBtnsOff');
    }
    $.modal.close();
    return false;
} 

視覚的な変更が行われた後に値を変更するため。

于 2012-07-15T11:57:26.047 に答える
0

data代わりに使用attr-attr文字列をdata受け取り、JavaScript オブジェクトを受け取ります。

于 2012-07-15T11:11:12.347 に答える