0

これは、ajax で挿入されたコードのフラグメントです。

<form>
    <label for = "task-name">Name</label>
    <input type = "text" id = "task-name" />

    <label for = "task-description">Description</label>
    <input type = "text" id = "task-description" />

    <input type = "hidden" id = "task-col" />
    <input type = "hidden" id = "task-row" />

    <input type = "submit" id = "add-task" onclick="return false" value="Add" />

</form>

これは、前の要素を DOM に挿入する JS コードです。

$('html').on('click', '.task-pop', function(){
    var pos = $(this).parent().parent().attr('class').split("-");
    ajaxObj = getXmlHttpObject();
    ajaxObj.onreadystatechange = function(){
        if(ajaxObj.readyState == 4 && ajaxObj.status == 200){
            $('#pop-hold').html(ajaxObj.responseText);
            $('#task-col').val(pos[0]);
            $('#task-row').val(pos[1]);
        }
    };
    ajaxObj.open("GET","resources/component/newTask.jsp");
    ajaxObj.send(null);

    $('#pop-blk').css('display','block');
    $('#pop').show("fast");
});

ご覧のとおり、非表示の入力#task-row#task-col動的に追加されたコンテンツにいくつかの値を追加しようとしています。

ページは適切に表示され、エラーはスローされませんが、これら 2 つのフィールドにはアクセスされません。どうすればこれを解決できますか?

4

3 に答える 3

1

変化する

$('#pop-hold').html(ajaxObj.responseText);
$('#task-col').val(pos[0]);
$('#task-row').val(pos[1]);

var html = $(ajaxObj.responseText);
html.find('#task-col').val(pos[0]);
html.find('#task-row').val(pos[1]);
$('#pop-hold').html('').append(html);
于 2012-04-06T10:17:41.750 に答える
1

入力が隠されているという事実は、それらの値を で設定することを妨げるものではありませんval()。このように val 関数を呼び出すときは、次の$('#task-col').val(pos[0]);ことを確認してください。

  • #task-col 要素が存在する
  • pos[0] は未定義ではありません ( に置き換えることpos[0]でテストできます"test")
  • 実際にこの行を実行しています(altet("test")前に行を置いてテストできます)

また、jQuery を使用する場合は、@Etheny が言ったように getXmlHttpObject をいじらないでください。代わりに$.ajaxを使用してください。

于 2012-04-06T10:48:04.513 に答える
1

jQuery ajax()を使用する必要があります。Ajax全体を処理する方がはるかに簡単です。

$('html').on('click', '.task-pop', function(){
    var pos = $(this).parent().parent().attr('class').split("-");

    $.ajax({
      url: 'resources/component/newTask.jsp',
      type: 'GET', // Default value is GET but I included it for you
      success: function(data) {
            $('#pop-hold').empty().append(data);
            $('#task-col').val(pos[0]);
            $('#task-row').val(pos[1]);
      }
    });

    $('#pop-blk').css('display','block');
    $('#pop').show("fast");
});

ほんの一部ですが、お役に立てれば幸いです^^

于 2012-04-06T10:32:36.070 に答える