Reputation: 31
If I click on the button "Send", a message will be placed inside a client sql database and a notification is shown.
However, this only works if I refresh the page first!
How do I make the function to start working immediately? I've already tried to place the function "addMessage" inside the $(document).ready(function() but then the function stops working entirely. See the code below:
<script>
var db;
$(document).ready(function() {
//Opens the database
try
{
if (!window.openDatabase) {
alert('Not supported -> Please use a webkit browser');
} else {
var shortName = 'Rvpk';
var version = '1.0';
var displayName = 'The Rvpk databse';
var maxSize = 3072*1024; // = 3MB in bytes 65536
db = openDatabase(shortName, version, displayName, maxSize);
}
}
catch(e)
{
if (e == 2) {
alert("Invalid database version.");
} else {
alert("Unknown error "+e+".");
}return;
}
//If needed creates the messagetable
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS message (id INTEGER PRIMARY KEY, name)')
});
});
//The function addMessage takes the entered message from the message inputfield and places it inside the messagetable
function addMessage(){
var message = $('input:text[name=message]').val();
db.transaction(function (tx) {
tx.executeSql("INSERT INTO message (id, name) VALUES (NULL, ?)", [message]);
});
console.log("Message "+ message +" added to database");
//Shows a notification that sending the message was a success
alert('The message has been sent');
//Update the messages
updateMessages();
}
</script>
</head>
<body>
<?php include("includes/header2.php"); ?>
<div data-role="content">
<form>
<fieldset>
<label id="messagelabel" for="message">Message:</label>
<input id="message" type="text" name="message" value="This can't go on like this">
<button onClick="addMessage()" data-theme="g">Send</button>
</fieldset>
</form>
</div>
Upvotes: 3
Views: 6334
Reputation: 31
I'm using Google Chrome as well. I still need to refresh first using this code.
<!DOCTYPE html>
<html lang="nl">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="jquery.mobile-1.2.0/jquery.mobile-1.2.0.css" />
<script src="jquery.mobile-1.2.0/jquery-1.8.2.min.js"></script>
<script src="jquery.mobile-1.2.0/jquery.mobile-1.2.0.min.js"></script>
<link href="css/layout.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="afbeeldingen/favicon.ico" type="image/x-icon" />
<meta name="Author" content="Tobias Boekwijt" /> <title>This can't go on like this</title>
<script>
var db;
function runThis()
{
//Opens the database
try
{
if (!window.openDatabase) {
alert('Not supported -> Please use a webkit browser');
} else {
var shortName = 'Rvpk';
var version = '1.0';
var displayName = 'The Rvpk databse';
var maxSize = 3072*1024; // = 3MB in bytes 65536
db = openDatabase(shortName, version, displayName, maxSize);
}
}
catch(e)
{
if (e == 2) {
alert("Invalid database version.");
} else {
alert("Unknown error "+e+".");
}return;
}
//If needed creates the messagetable
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS message (id INTEGER PRIMARY KEY, name)')
});
}
//The function addMessage takes the entered message from the message inputfield and places it inside the messagetable
function addMessage(){
//call db access function.
runThis();
var message = $('input:text[name=message]').val();
db.transaction(function (tx) {
tx.executeSql("INSERT INTO message (id, name) VALUES (NULL, ?)", [message]);
});
console.log("Message "+ message +" added to database");
//Shows a notification that sending the message was a success
alert('The message has been sent');
}
</script>
</head>
<body>
<div id="wrapper">
<div data-role="page" id="page1">
<div data-role="header" data-position="fixed" data-theme="a">
<h3>Test</h3>
<a href="#popupInfo" data-rel="popup" data-position-to="window" data-role="button" data-icon="grid" data-iconpos="notext" class="ui-btn-right" data-theme="a" data-transition="pop"></a>
<div data-role="popup" id="popupInfo" class="ui-content" data-theme="e">
<a href="#" data-rel="back" data-role="button" data-theme="bl" data-icon="delete" data-iconpos="notext" class="ui-btn-right">Close</a>
<div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
<a data-role="button" href="messages.php" data-theme="b">My messages</a>
<a data-role="button" href="logout.php" data-theme="r">Log out</a>
</div>
</div>
<a data-role="button" href="for_who.php" data-icon="home" data-iconpos="notext" class="ui-btn-left" data-theme="a"></a>
</div>
<div data-role="content">
<form>
<fieldset>
<label id="messagelabel" for="message">Message:</label>
<input id="message" type="text" name="message" value="This can't go on like this">
<button onClick="addMessage()" data-theme="g">Send</button>
</fieldset>
</form>
</div>
</div>
</div>
</body>
</html>
Upvotes: 0
Reputation: 3156
Please try this:
document.ready is run only on page load. Instead use it in a separate function and call that function whenever you want. copy and paste following script.
<script>
var db;
function runThis()
{
//Opens the database
try
{
if (!window.openDatabase) {
alert('Not supported -> Please use a webkit browser');
} else {
var shortName = 'Rvpk';
var version = '1.0';
var displayName = 'The Rvpk databse';
var maxSize = 3072*1024; // = 3MB in bytes 65536
db = openDatabase(shortName, version, displayName, maxSize);
}
}
catch(e)
{
if (e == 2) {
alert("Invalid database version.");
} else {
alert("Unknown error "+e+".");
}return;
}
//If needed creates the messagetable
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS message (id INTEGER PRIMARY KEY, name)')
});
}
//The function addMessage takes the entered message from the message inputfield and places it inside the messagetable
function addMessage(){
//call db access function.
runThis();
var message = $('input:text[name=message]').val();
db.transaction(function (tx) {
tx.executeSql("INSERT INTO message (id, name) VALUES (NULL, ?)", [message]);
});
console.log("Message "+ message +" added to database");
//Shows a notification that sending the message was a success
alert('The message has been sent');
//Update the messages
updateMessages();
}
</script>
Upvotes: 1
Reputation: 8041
This code if copy pasted in a file works fine when opened in chrome, It throws an alert message "The Message has been sent" on button click without the need to refresh
<html>
<head>
<script src="jquery.min.js" type="text/javascript"></script>
<script>
var db;
$(document).ready(function() {
//Opens the database
try
{
if (!window.openDatabase) {
alert('Not supported -> Please use a webkit browser');
} else {
var shortName = 'Rvpk';
var version = '1.0';
var displayName = 'The Rvpk databse';
var maxSize = 3072*1024; // = 3MB in bytes 65536
db = openDatabase(shortName, version, displayName, maxSize);
}
}
catch(e)
{
if (e == 2) {
alert("Invalid database version.");
} else {
alert("Unknown error "+e+".");
}return;
}
//If needed creates the messagetable
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS message (id INTEGER PRIMARY KEY, name)')
});
});
//The function addMessage takes the entered message from the message inputfield and places it inside the messagetable
function addMessage(){
var message = $('input:text[name=message]').val();
db.transaction(function (tx) {
tx.executeSql("INSERT INTO message (id, name) VALUES (NULL, ?)", [message]);
});
console.log("Message "+ message +" added to database");
//Shows a notification that sending the message was a success
alert('The message has been sent');
//Update the messages
updateMessages();
}
</script>
</head>
<body>
<?php include("includes/header2.php"); ?>
<div data-role="content">
<form>
<fieldset>
<label id="messagelabel" for="message">Message:</label>
<input id="message" type="text" name="message" value="This can't go on like this">
<button onClick="addMessage()" data-theme="g">Send</button>
</fieldset>
</form>
</div>
</body>
</html>
and Ofcourse make sure to have the jquery.min.js in same directory
Upvotes: 0
Reputation: 901
I pasted your code in test file and tried to find where is the exact problem. I don't know what the exact problem but I found that blow portion has some issue and that's why alert is not coming in first time:
db.transaction(function (tx) { tx.executeSql("INSERT INTO message (id, name) VALUES (NULL, ?)", [message]); });
Try with commenting above portion the alert will work come without refreshing the page. I think you should check that if you've made mistake in above portion.
Upvotes: 0