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动态添加的内容添加一些值。

该页面已正确显示并且没有引发错误,但从未访问过这两个字段。我该如何解决这个问题?

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

你应该使用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 回答
1

输入被隐藏这一事实并不能阻止您使用val(). 当您像这样调用 val 函数时$('#task-col').val(pos[0]);,请确保:

  • #task-col 元素存在
  • pos[0] 不是未定义的(您可以通过替换来pos[0]测试"test"
  • 您实际上正在执行此行(您可以通过在前面放置altet("test")一行来进行测试)

当你使用 jQuery 时,不要像@Ethenyl 所说的那样乱用 getXmlHttpObject 。改用$.ajax

于 2012-04-06T10:48:04.513 回答