我有一个多行文本区域,可以接受42个字符,如果用户超出限制并单击提交按钮,他将收到一条警告消息,例如“超出限制,因此删除'***'字符。下面是执行相同操作的代码。
from flask import Flask, jsonify
from flask_sqlalchemy import SQLAlchemy
from marshmallow import Schema, fields, pprint
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['SECRET_KEY'] = 'super-secret'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:'
app.config['SQLALCHEMY_ECHO'] = True
db = SQLAlchemy(app)
class CompanyDemo(db.Model):
__tablename__ = 'company_demo'
company_id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, nullable=False)
address = db.Column(db.String(50))
location = db.Column(db.String(50))
def __unicode__(self):
return u"{name} ({address})".format(name=self.name, address=self.address)
class UsersDemo(db.Model):
__tablename__ = 'users_demo'
id = db.Column(db.Integer, primary_key=True,)
company_id = db.Column(db.Integer, db.ForeignKey('company_demo.company_id'), nullable=False)
company = db.relationship('CompanyDemo')
email = db.Column(db.String)
def __unicode__(self):
return u"{email}".format(email=self.email)
class CompanySchema(Schema):
company_id = fields.Int(dump_only=True)
name = fields.Str()
address = fields.Str()
location = fields.Str()
class UserSchema(Schema):
email = fields.Str()
company = fields.Nested(CompanySchema)
user_schema = UserSchema()
company_schema = CompanySchema()
@app.route('/')
def index():
return "<a href='/dump_company'>Dump Company</a><br><a href='/dump_user'>Dump User</a>"
@app.route('/dump_user')
def dump_user():
user = UsersDemo.query.first()
return jsonify(user_schema.dump(user).data)
@app.route('/dump_company')
def dump_company():
company = CompanyDemo.query.first()
return jsonify(company_schema.dump(company).data)
def build_db():
db.drop_all()
db.create_all()
company = CompanyDemo(name='Test 1', address='10 Downing Street', location='wherever')
db.session.add(company)
user = UsersDemo(email='fred@example.com', company=company)
db.session.add(user)
db.session.commit()
@app.before_first_request
def first_request():
build_db()
if __name__ == '__main__':
app.run(debug=True, port=7777)
但我的问题是,一旦我从文本框区域取消控制焦点而不是单击提交按钮,我应该得到相同的警报消息。 所以请帮助我实现它...... !! 提前谢谢......
附加要求:收到警报消息并单击“确定”按钮后,应删除多余的字符。请帮忙..
答案 0 :(得分:0)
您需要使用onchange或keyup事件将其绑定到textarea。
首先在textarea中添加ID。然后将事件侦听器绑定到它,并调用您的函数。
document.getElementById("textAreaBox").addEventListener("keyup", ok(42));
Alernatively,您可以在HTML中使用onpropertychange
事件。
<textarea name="box" rows="5" cols="30" onpropertychange="ok(42)">
</textarea>
答案 1 :(得分:0)
添加这个onblur =&#34; ok(42)&#34;或onkeyup =&#34; ok(42)&#34;在你的textarea里面
<textarea name="box" rows="5" cols="30" onblur="ok(42)">
</textarea>
OR
<textarea name="box" rows="5" cols="30" onkeyup="ok(42)">
</textarea>
答案 2 :(得分:0)
你可以为textarea提供一个id / class并使用simple JqueryEvents - 用于触发函数的Onblur或FocusOut事件。 - &GT; https://api.jquery.com/blur/
Javascript模糊事件 - &GT; http://www.w3schools.com/jsref/event_onblur.asp
答案 3 :(得分:0)
这是一个使用jQuery的简单解决方案
$(function(){
$("#box").keypress(function(){
if($(this).val().trim().length > $(this).data("limit") - 1) {
alert("You have reached the limit");
return false;
}
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="" method="post" name="ourform">
Please enter data, at most 42 characters:<br/>
<textarea name="box" rows="5" cols="30" data-limit="10" id="box"></textarea>
<br/><input type="submit"/>
</form>
&#13;
请试一试。
答案 4 :(得分:0)
您可以提供&#39; maxlength &#39;属性到您的文本区域。这是一个例子。 它有效。
<form action="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/chkarea.pl"
method="post" name="ourform" onsubmit="return ok(42)">
Please enter data, at most 42 characters:<br />
<textarea name="box" rows="5" cols="30" maxlength="42">
</textarea>
<br />
<input type="submit" />
</form>