Cannot read property 'value' of null on simple var assignment: var goToThis = ""; - javascript

I'm getting a javascript error Cannot read property 'value' of null on simple var assignment var goToThis = "";
// It is the second function that has the error.
function nextFocus(tLast) {
var goToThis = "";
var val = 0;
if(tLast === 'activity') {
if(document.getElementById('[Slip]Note').value === "") {
document.getElementById('[Slip]Note').value = document.getElementById('[Slip]Activity').value;
}
}
if((tLast === 'activity') && (fLedes === true)){
document.getElementById('[Slip]Task No').focus();
} else if((tLast === 'activity') && (fLedes === false)){
goToThis = 'billableHrs';
} else if(tLast === 'expense'){
goToThis = 'priceAdjustment';
} else if((tLast === 'task') && (initialSlipType === 'time')){
goToThis = 'billableHrs';
} else if((tLast === 'task') && (initialSlipType === 'expense')){
goToThis = 'priceAdjustment';
}
if(goToThis === 'billableHrs') {
val = getReal(document.getElementById("[Slip]Billable Hrs"));
if(val === 0) {
document.getElementById("[Slip]Billable Hrs").value = '';
//alert('[Slip]Billable Hrs: '+val);
}
document.getElementById('[Slip]Billable Hrs').focus();
} else if (goToThis === 'priceAdjustment') {
val = getReal(document.getElementById("[Slip]Price Adjustment"));
if(val === 0) {
document.getElementById("[Slip]Price Adjustment").value = '';
//alert('[Slip]Price Adjustment: '+val);
}
document.getElementById('[Slip]Price Adjustment').focus();
}
}

This error was solved by correcting the spelling of an HTML element involved with this function call.
Safari pointed to the correct error line.
Chrome would not point to the correct error line.

Check opening and closing curly braces {} on all functions of the page. Sometimes {} mismatch ,also gives weird errors. Also try '' instead of "";

Related

TypeError on load .js

I have code before , but console showing TypeError: $ is not function on line 1 :(
Can you help me with reason? Thanks!
$('.day.event').parent().each(function (i, e) {
var element = $(e);
var prevElement=$(e).prev();
var hasPrevElement = true;
if(prevElement.size() === 0) {
var prevRow = element.parent().prev();
if(prevRow.size() === 0) {
hasPrevElement = false;
}
prevElement = prevRow.children().last();
}
var nextElement=$(e).next();
var hasNextElement = true;
if(nextElement.size() === 0) {
var nextRow = element.parent().next();
if(nextRow.size() === 0) {
hasNextElement = false;
}
nextElement = nextRow.children().first();
}
if(hasPrevElement && prevElement.children().first().attr("class").indexOf("event") === -1 || !hasPrevElement) {
element.addClass('first-day')
}
if(hasNextElement && nextElement.children().first().attr("class").indexOf("event") === -1) {
nextElement.addClass('after-event');
}
});
You should import jQuery library before the code above as #Wendelin said or check the path of your file

How can I stop this from writing a value to all dictionaries? (Javascript)

Intro
So I have stumbled across this problem yesterday, and I've been stumped trying to figure this out myself. I only have this problem with JavaScript.
Problem
I've been creating a programming language with JS since the start of this week, and I was enjoying myself the entire week making it. The problem here is that when I carry dictionaries across functions, it has some problems reading and writing into those dictionaries. When I check the console logs, I see that not just the dictionary in the function was written, but all of the instances of that dictionary were written.
Code
Here is the code to graph.js:
function codeToArray(code) {
let codeArray = {commands:[], vars:{x:{value:0, read_only:true},y:{value:0, read_only:false}}};
let commands = code.split("\n");
for (i = 0; i < commands.length; i++) {
let command = commands[i];
let inputs = command.split(" ");
if (inputs[0].toLowerCase() !== ";") {
// Arithmetics
if (inputs[0].toLowerCase() === "+") { // Addition
codeArray.commands.push({name:"add", variable:inputs[1], value:inputs[2], syntax_id:1});
} else if (inputs[0].toLowerCase() === "-") { // Subtraction
codeArray.commands.push({name:"subtract", variable:inputs[1], value:inputs[2], syntax_id:1});
} else if (inputs[0].toLowerCase() === "*") { // Multiplication
codeArray.commands.push({name:"multiply", variable:inputs[1], value:inputs[2], syntax_id:1});
} else if (inputs[0].toLowerCase() === "/") { // Division
codeArray.commands.push({name:"divide", variable:inputs[1], value:inputs[2], syntax_id:1});
}
// I/O
else if (inputs[0].toLowerCase() === ":") { // Set
codeArray.commands.push({name:"set", variable:inputs[1], value:inputs[2], syntax_id:1});
}
// Conditional Statements
else if (inputs[0].toLowerCase() === "if") { // If Statement
let ifCommand = "";
for (j = 4; j < inputs.length; j++) {
if (j > 4) {
ifCommand += " " + inputs[j];
} else {
ifCommand += inputs[j];
}
}
let ifCommandArray = codeToArray(ifCommand).commands[0];
codeArray.commands.push({name:"if", value1:inputs[1], condition:inputs[2], value2:inputs[3], command:ifCommandArray, syntax_id:2});
}
}
}
return codeArray
}
function parseValue(value, variables) {
let return_value = value;
console.log(value);
console.log(variables);
if (value.charAt(0) === "$") {
let variable_name = return_value.substring(1, value.length);
console.log(variable_name);
let variable = variables[variable_name];
console.log(variable);
if (variable === undefined) {
return_value = NaN;
} else {
return_value = variable.value;
}
} else {
return_value = parseFloat(value);
}
console.log(return_value);
return return_value
}
function runCodeArray(commands, variables) {
for (i = 0; i < commands.length; i++) {
let command = commands[i];
if (command.syntax_id === 1) { // Simple Syntax (Variable Value Syntax)
if (command.name === "add") { // Addition
let variable = variables[command.variable];
if (variable === undefined) {
let error_message = `Variable cannot be found (line ${i+1} ignoring comments)`;
return {commands:commands, variables:variables, return_message:error_message};
}
if (variable.read_only === true) {
let error_message = `A read-only variable was trying to be written (line ${i+1} ignoring comments)`;
return {commands:commands, variables:variables, return_message:error_message};
}
let value = parseValue(command.value, variables);
if (value === NaN) {
let error_message = `The value parameter is invalid (line ${i+1} ignoring comments)`;
return {commands:commands, variables:variables, return_message:error_message};
}
variable.value += value;
} else if (command.name === "set") { // Set
let variable = variables[command.variable];
if (variable === undefined) {
variables[command.variable] = {value:0, read_only:false};
variable = variables[command.variable];
}
if (variable.read_only === true) {
let error_message = `A read-only variable was trying to be written (line ${i+1} ignoring comments)`;
return {commands:commands, variables:variables, return_message:error_message};
}
let value = parseValue(command.value, variables);
if (value === NaN) {
let error_message = `The value parameter is invalid (line ${i+1} ignoring comments)`;
return {commands:commands, variables:variables, return_message:error_message};
}
variable.value = value;
}
}
}
return {commands:commands, variables:variables, return_message:true};
}
var url_string = ...graph.html?pattern=%3A+a+42%0D%0A%3A+b+%24a%0D%0A%3A+c+%24b%0D%0A // window.location.href;
var url = new URL(url_string);
var pattern = url.searchParams.get("pattern");
let codeArray = codeToArray(pattern);
// console.log(codeArray);
let codeArrayOut = runCodeArray(codeArray.commands, codeArray.vars); // Will return true in return_message if everything is good, and will return a string in return_message if an error occurs.
// console.log(codeArrayOut);
if (codeArrayOut.return_message !== true) {
alert("Error: " + codeArrayOut.return_message);
}
Sorry if the code is too long, boring or messy for you to read. Here is the function that's causing the most problems:
function parseValue(value, variables) {
let return_value = value;
console.log(value);
console.log(variables);
if (value.charAt(0) === "$") {
let variable_name = return_value.substring(1, value.length);
console.log(variable_name);
let variable = variables[variable_name];
console.log(variable);
if (variable === undefined) {
return_value = NaN;
} else {
return_value = variable.value;
}
} else {
return_value = parseFloat(value);
}
console.log(return_value);
return return_value
}
Outro
I'm still learning in JavaScript, so I hope that you can solve this problem (because I can't).

Getting an Unknown CORS error in Odoo-12 POS UI Book Orders

I am getting this error on POS UI I really need help because I don't understand the error
I am using the Book Order module and I often get this error like 1 in 10 book orders
Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at child.add_product (point_of_sale.assets.js:493)
at Class.line_select (point_of_sale.assets.js:429)
at HTMLButtonElement.<anonymous> (point_of_sale.assets.js:425)
at HTMLTableSectionElement.dispatch (web.assets_common.js:892)
at HTMLTableSectionElement.elemData.handle (web.assets_common.js:865)
here's how I modified the add_product function
add_product: function(product, options){
var can_add = true;
var changes = this.pos.get_order();
var self = this;
if(changes.selected_orderline){
if(changes.selected_orderline.order){
if(changes.selected_orderline.order.quotation_ref){
if(changes.selected_orderline.order.quotation_ref.book_order){
can_add= false;
}
}
}
}
if (can_add){
if(this._printed){
this.destroy();
return this.pos.get_order().add_product(product, options);
}
this.assert_editable();
options = options || {};
var attr = JSON.parse(JSON.stringify(product));
attr.pos = this.pos;
attr.order = this;
var line = new POSInheritmodel.Orderline({}, {pos: this.pos, order: this, product: product});
if(options.quantity !== undefined){
line.set_quantity(options.quantity);
}
if(options.price !== undefined){
line.set_unit_price(options.price);
}
//To substract from the unit price the included taxes mapped by the fiscal position
this.fix_tax_included_price(line);
if(options.discount !== undefined){
line.set_discount(options.discount);
}
if(options.discounted_amount !== undefined){
line.set_discount_amount(options.discounted_amount);
}
if(options.discount_percentage !== undefined){
line.set_if_discount_percentage(options.discount_percentage);
}
if(options.discount_amount !== undefined){
line.set_if_discount_amount(options.discount_amount);
}
if(options.extras !== undefined){
for (var prop in options.extras) {
line[prop] = options.extras[prop];
}
}
if(options.uom !== undefined || options.uom !== false){
line.set_unit_id(options.uom);
}
if(options.is_board_feet !== undefined && options.is_board_feet){
line.set_is_board_feet(true);
line.set_length(product.length);
line.set_thickness(product.thickness);
line.set_width(product.width);
// console.log(product.length);
}else if(options.is_board_feet !== undefined && !options.is_board_feet){
line.set_is_board_feet(false);
}else{
if(changes.attributes.client !== null){
if(changes.attributes.client.is_wholesale || changes.attributes.client.is_retail){
if(product.is_board_feet){
line.set_is_board_feet(true);
line.set_length(product.length);
line.set_thickness(product.thickness);
line.set_width(product.width);
}
}
}
}
if(options.is_lineal_feet && options.is_lineal_feet !== undefined){
line.set_is_lineal_feet(true);
line.set_length(product.length);
// console.log(product.length);
}else if(options.is_lineal_feet !== undefined && !options.is_lineal_feet){
line.set_is_lineal_feet(false);
}else{
if(changes.attributes.client !== null){
if(changes.attributes.client.is_wholesale || changes.attributes.client.is_retail){
if(product.is_lineal_feet){
line.set_is_lineal_feet(true);
line.set_length(product.length);
}
}
}
}
if(options.is_lineal_meter && options.is_lineal_meter !== undefined){
line.set_is_lineal_meter(true);
line.set_length(product.length);
// console.log(product.length);
}else if(options.is_lineal_meter !== undefined && !options.is_lineal_meter){
line.set_is_lineal_meter(false);
}else{
if(changes.attributes.client !== null){
if(changes.attributes.client.is_wholesale || changes.attributes.client.is_retail){
if(product.is_lineal_meter){
line.set_is_lineal_meter(true);
line.set_length(product.length);
}
}
}
}
if(options.with_base_price){
line.set_with_base_price(true);
if(options.base_price_discount !== undefined){
line.set_base_price_discount(options.base_price_discount);
}
if(options.markup !== undefined){
line.set_markup(options.markup);
}
// console.log(product.length);
}
if(options.is_weight !== undefined && options.is_weight){
line.set_is_weight(true);
line.set_weight_receipt_display(options.base_weight);
}else if(options.is_weight !== undefined && !options.is_weight){
line.set_is_weight(false);
if(options.base_weight !== undefined && options.base_weight != 0){
line.set_weight_receipt_display(options.base_weight);
}else{
line.set_weight_receipt_display(product.weight);
}
}else{
if(options.base_weight !== undefined && options.base_weight != 0){
line.set_weight_receipt_display(options.base_weight);
}else{
line.set_weight_receipt_display(product.weight);
}
if(changes.attributes.client !== null){
if(changes.attributes.client.is_wholesale || changes.attributes.client.is_retail){
if(product.is_weight){
line.set_is_weight(true);
}
}
}
}
var to_merge_orderline;
for (var i = 0; i < this.orderlines.length; i++) {
if(this.orderlines.at(i).can_be_merged_with(line) && options.merge !== false){
to_merge_orderline = this.orderlines.at(i);
}
}
if (to_merge_orderline){
to_merge_orderline.merge(line);
} else {
this.orderlines.add(line);
}
this.select_orderline(this.get_last_orderline());
if(line.has_product_lot){
this.display_lot_popup();
}
}else{
self.pos.gui.show_popup('error',{
title :_t('Modification Restricted'),
body :_t('Modification is not allowed for booked orders.'),
});
}
},
this is all that I can give I didn't try anything to fix this because I don't really know where to start any help is very much appreciated thank you.

if statements being skipped even when both expressions are true

I have a webpage that populates a table with arrays. It has a doClick function so that when a user clicks on a cell it passes the row and column of the cell to the function. Example cell: onclick="doClick(0,1)"
function doClick(row, col)
{
var top = row -1;
var bottom = row +1;
var left = col -1;
var right = col +1;
var swapped = false;
if ((top != -1) && (cells[top][col].innerHTML = ""))
{
cells[top][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((right != 4) && (cells[row][right].innerHTML = ""))
{
cells[row][right].innerHTML = cells[row][col].innerHTML ;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((bottom != 4) && (cells[bottom][col].innerHTML = ""))
{
cells[bottom][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((left != -1) && (cells[row][left].inn = ""))
{
cells[row][lef].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else
{
alert("Illegal Move.");
}
. The problem is, even if both if expressions are true, the if statement is being skipped and it's falling through to the else statement. I've desk checked it and run it through the developer tools and checked values. A statement that was true on both expressions was skipped. Any suggestions?
cells[row][right].innerHTML = ""
is wrong. You are missing the double (triple) =.
The correct way should be...
cells[row][right].innerHTML === ""
It looks like maybe there are a few typos or misconceptions in your code.
A quick note about Conditions in an IF statement
A statement like (cells[top][col].innerHTML = "") as a condition will always return true as this is setting cells[top][col].innerHTML as "" or at least instantiating the variable. So, the proper condition to test absolutely true or false would be (cells[top][col].innerHTML === ""). However, you can get away with not even doing that and simply replace (cells[top][col].innerHTML = "") with cells[top][col].innerHTML. You may run into some other issues though is the variable is not instantiated already, either way. I would wrap the latter logic in an IF statement to check if cells[top][col].innerHTML is even instantiated.
To fix this, check out the following modifications I have made to your code.
function doClick(row, col)
{
var top = row -1;
var bottom = row +1;
var left = col -1;
var right = col +1;
var swapped = false;
if(typeof cells[top][col].innerHTML !== 'undefined' $$ cells[top][col].innerHTML !== null)
{
if ((top != -1) && cells[top][col].innerHTML !== '')
{
cells[top][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((right != 4) && cells[row][right].innerHTML !== '')
{
cells[row][right].innerHTML = cells[row][col].innerHTML ;
cells[row][col].innerHTML = "";
swapped = true;
}
else if ((bottom != 4) && (cells[bottom][col].innerHTML))
{
cells[bottom][col].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else
{
alert("Illegal Move.");
}
}
else if (typeof cells[row][left].inn !== 'undefined' && (left != -1) && cells[row][left].inn !== '')
{
cells[row][lef].innerHTML = cells[row][col].innerHTML;
cells[row][col].innerHTML = "";
swapped = true;
}
else
{
alert("Illegal Move.");
}
}
An example working to demonstrate the above code
var testVar1 = '';
var testVar2 = 'Hello';
// var testVar3; <- Left this un-instantiated to test existance
// Testing if a var is empty but exists
if(typeof testVar1 !== 'undefined' && testVar1 !== null){
if(testVar1 !== ''){
alert('testVar1 has a value!');
}{
alert('testVar1 does not have a value!');
}
}
// Testing if a var is empty but exists
if(typeof testVar2 !== 'undefined' && testVar2 !== null){
if(testVar2 !== ''){
if(testVar2 === 'Hello'){
alert('testVar2 has a value! Value: ' + testVar2);
}{
alert('testVar2 has a value but it is not the one we expected.');
}
}{
alert('testVar2 does not have a value!');
}
}
// Test existance
if(typeof testVar3 !== 'undefined' && testVar3 !== null){
alert('testVar3 exists!');
}else{
alert('testVar3 does not exist!');
}

jquery error TypeError: Value not an object. with .split(',')

i am getting a strange error
Error: TypeError: Value not an object.
Source File: /Scripts/jquery-1.8.3.js
Line: 4
while i am trying to do a .split() with javascript.
Following is the snippet :
$("#item_qty_1").on("keydown", function (event) {
if (event.which == 13) {
var weight_code = $("#weight_code").val();
var qty = Number($(this).val());
if((weight_code == "2" || weight_code == "3") && qty <= 50)
{
var qty_sub_val = document.getElementById('item_qty_sub').value;
var qty_sub = "";
console.log(typeof qty_sub_val);
if(qty_sub_val != "" && qty_sub_val !== null)
{
qty_sub = qty_sub_val.split(',');
}
$("#test").html(qty_sub);
for(var i=1; i<=50; i++)
{
if(i>qty)
{
$("#qty_" + i).attr("tabindex","-1").attr("readonly","readonly").removeAttr("last").css("background","#e6e6e6");
}
else
{
if(qty_sub_val != "")
{
$("#qty_" + i).attr("tabindex",i).removeAttr("readonly").removeAttr("last").css("background","white").val(qty_sub[i-1]);
}
else
{
$("#qty_" + i).attr("tabindex",i).removeAttr("readonly").removeAttr("last").css("background","white");
}
}
}
$("#qty_" + qty).attr("last","0");
$("#unit1_list").modal();
}
event.preventDefault();
return false;
}
});
it is giving error only when qty_sub_val != ""; i.e. when .split(',') is called.
Please check what $("#item_qty_sub") returns. I think it is not returning the right value.

Categories

Resources