取消要提交的表单,不更改实体的数据

Cancel a form to be submitted, do not change the data of the entity

本文关键字:实体 数据 提交 表单 取消      更新时间:2023-09-26

我有一个div

   <div id="updateChoice%s" class="text-center"></div>

显示了以下内容当点击"updateText"按钮时

function updateText(urlsafe) {
    document.getElementById("updateChoice"+urlsafe).innerHTML +=
    '<br><br><form id="dynForm" action="/updateText" method="post" >' +
   '<textarea name="newContent" rows="5" cols="80"></textarea>' + 
   '<input type="hidden" name="update" value=' + urlsafe + '>' +   '<br><br>' + 
   '<input class="choice" type="submit" value="Submit"></input> <button class="choice"  onclick="cancelUpdate('+ urlsafe +')">Cancel</button>' +
   '</form>';
}

我想取消文本的更新,但它不工作,除非"newContent"是空的,这里是/updateText文件和cancelUpdate(urlsafe)

/updateText:

class UpdateText(webapp2.RequestHandler):
     def post(self):
         greeting_key = ndb.Key(urlsafe=self.request.get('update'))
         event = greeting_key.get(); 
         if(self.request.get('newContent') != ''):
           event.content = self.request.get('newContent');
           event.put();
         self.redirect('/events');

cancelUpdate (urlsafe):

function cancelUpdate(urlsafe) {
    document.getElementByName("newContent").innerHTML="";
    document.getElementById("dynForm").submit();
}

任何想法?

/updateText处理程序保持不更新文本,如果在提交时它是空的,所以不要改变任何东西:

cancelUpdate(urlsafe)函数中,使用如下方法:
function cancelUpdate(urlsafe) {
       document.getElementById("updateChoice"+urlsafe).innerHTML = "";
}

在传递参数urlsafe时添加'',而不是"。所以这里是正确的javascript函数调用div#updateChoice%s是:

function updateText(urlsafe) {
    document.getElementById("updateChoice"+urlsafe).innerHTML =
    '<br><br><form id="dynForm" action="/updateText" method="post" >' +
   '<textarea name="newContent" rows="5" cols="80"></textarea>' + 
   '<input type="hidden" name="update" value=' + urlsafe + '>' +   '<br><br>' + 
   '<input class="choice" type="submit" value="Submit"></input><button type="button" class="choice" onClick="cancelUpdate('''+ urlsafe +''')">Cancel</button>' +
   '</form>';
}

你的问题很难理解(你说的"cancel the update of text"是什么意思?你以为会发生什么?到底是什么"不起作用"?)

此外,您提供的代码存在多个问题(其中没有一个必须与GAE, Python或webapp2做任何事情),这里有一些可能有助于解决您的问题:

1)你的cancelUpdate函数接受一个urlsafe参数,但没有使用它。

2)在您的cancelUpdate函数中,您使用的是不存在的函数getElementByName,您可能打算使用其复数版本getElementsByName()

3)

  • 在同一document.getElementByName("newContent").innerHTML="";行上,您正在检索名称为newContent的元素,这是<textarea>元素,并试图清空其innerHTML属性,但<textarea>没有。如果你想清空<textarea>的内容-你需要做document.getElementByName("newContent").value="";代替。

  • 由于您的cancelUpdate函数有一个未使用的参数urlsafe,虽然不清楚您的问题是什么,但由于在您的updateText函数中,您正在创建一个具有id="updateChoice"+urlsafe的元素,并假设当您点击取消时-您还想破坏该形式,那么您的cancelUpdate看起来就像这样简单:

,

    function cancelUpdate(urlsafe) {
        document.getElementById("updateChoice"+urlsafe).innerHTML = "";
    }

4)

  • 你的"取消"按钮没有指定type,这意味着即使你不想提交表单,它也会默认为submit,所以你需要添加type="button"来阻止提交。

  • 您正在调用cancelUpdate函数中的document.getElementById("dynForm").submit();,该函数与前一个问题结合将提交您的表单两次。