好的,让我们开始吧。
此代码在控制台中运行良好,可以执行所需的操作。
$('#tasks-table input').parent().html($('#tasks-table input').siblings('textarea').val())
但在这样的调用中,它甚至不会执行。控制台是沉默的。所有其他功能代码都正确执行
updateTask.call(this, 131)
有任何想法吗?
更新
这
$('#tasks-table input').parent().html($('#tasks-table input').siblings('textarea').val())
是其中的一部分
updateTask.call(this, 131)
并在 updateTask 中被忽略,这条指令在控制台上工作得很好,但当它是 updateTask 的一部分时不会
html 是一个 4 行 php 生成的表,其中有一行典型的
<tr>
<td><?php echo $task->id ?></td>
<td onclick='projects.editTask.call(this, <?php echo $task->id ?>)'><?php echo $task->text ?> </td>
<td><?php echo $task->status ?></td>
<td><?php echo $task->controls ?></td>
</tr>
editTask 是一个简单的替换功能(td 的内容变成了 textarea)
if(block || !($(this).attr('incomplete'))) return; //only one is allowed
block = true;
if(!$(this).children('textarea').length) {
$(this).html('<textarea style="width: 100%; height: 110px;">'+$(this).html()+'</textarea><br/><input type="button" value="Сохранить" onclick="projects.updateTask.call(this, '+parseInt(id)+')" />');
}
updateTask 的目标是将 td 中的任何内容替换回 textarea 的内容,并使用 updateTask 的 $.post 内容将更新请求发送回服务器
var text = $(this).siblings('textarea').val();
//does not work only here, but works anywhere else
$('#tasks-table input').parent().text($('#tasks-table input').siblings('textarea').val())
$.post('/projects/ajax/', {
ajax: true,
command: 'update',
id: id,
text: text }
, function() {
block = false;
});
当我以更复杂的方式进行操作时,它会起作用。像这样更简单的方法:
$(this).parent().html(text)
也没有用