JavaScript: Могу ли я объявить переменную, запросив, какая функция вызывается? (Новичок) - PullRequest
0 голосов
/ 20 марта 2012

Я работаю с существующим модулем корзины на основе JavaScript, который пытаюсь изменить. Я не знаю JS и по разным причинам должен работать с тем, что уже есть.

Текст, отображаемый для моего поля количества, определен в существующей функции:

function writeitems() {

var i;
for (i=0; i<items.length; i++) {
    var item=items[i];
    var placeholder=document.getElementById("itembuttons" + i);
    var s="<p>";

    // options, if any
    if (item.options) {
        s=s+"<select id='options"+i+"'>";
        var j;
        for (j=0; j<item.options.length; j++) {
            s=s+"<option value='"+item.options[j].name+"'>"+item.options[j].name+"</option>";
        }
        s=s+"</select>&nbsp;&nbsp;&nbsp;";
    }



// add to cart

    s=s+"Quantity: <input id='quantity"+i+"' value='1' size='3'/> ";

    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/></p>";
    }


    placeholder.innerHTML=s;
}
refreshcart(false);
}

У меня есть два разных типа поля ввода количества; один (пожертвования) должен быть снабжен знаком доллара, а один (предметы) должен быть пустым.

Я взял существующую функцию additem, скопировал ее и переименовал так, чтобы было две идентичные функции: одна для предметов и одна для пожертвований. Функция additem ниже:

function additem(name,cost,quantityincrement) {
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;

}

Есть ли способ объявить глобальную переменную, основанную на том, какая функция (additem или adddonation) вызывается, чтобы я мог добавить это в функцию writeitems, чтобы отображать или скрывать знак доллара по мере необходимости? Или есть лучшее решение?

Я не могу использовать HTML в теле страницы корзины из-за того, как она в данный момент кодируется, поэтому я полагаюсь на то, что JS позаботится об этом.

Любая помощь для новичка приветствуется. Спасибо!

ОБНОВЛЕНИЕ 3/22: Хорошо, я отредактировал файл .js следующим образом: var items = new Array; var cart = new Array; var isDonation = false;

function additem(name,cost,quantityincrement) {
var isDonation=false;
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;
}

function adddonation(name,cost,quantityincrement) {
var isDonation=true;
if (!quantityincrement) quantityincrement=1; 
var index=items.length;
items[index]=new Object;
items[index].name=name;
items[index].cost=cost;
items[index].quantityincrement=quantityincrement;

document.write("<span id='itembuttons" + index + "'></span>");

return index;
}

...

function writeitems() {

var i;
for (i=0; i<items.length; i++) {
    var item=items[i];
    var placeholder=document.getElementById("itembuttons" + i);
    var s="";

    // options, if any
    if (item.options) {
        s=s+"<select id='options"+i+"'>";
        var j;
        for (j=0; j<item.options.length; j++) {
            s=s+"<option value='"+item.options[j].name+"'>"+item.options[j].name+"</option>";
        }
        s=s+"</select>&nbsp;&nbsp;&nbsp;";
    }



// add to cart
    if (!isDonation) {
    s=s+"<input id='quantity"+i+"' size='3' type='hidden'/>";
    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/><br /><br />";
    }
    else {

    s=s+"$<input id='quantity"+i+"' size='3'/>.00 ";
    s=s+"<input type='submit' value='Add to Cart' onclick='addtocart("+i+"); return false;'/><br /><br />";
    }

    placeholder.innerHTML=s;
}
refreshcart(false);
}

Полученная страница не различает функции additem и adddonation и является выходной. Изменение оператора if / else на isDonation = true изменяет все выходные данные универсально, а isDonation = false изменяет аналогично, но также и универсально.

Я в полной растерянности.

1 Ответ

1 голос
/ 20 марта 2012

Это довольно уродливо, но вы можете решить эту проблему, имея глобальную переменную isDonation. Установите это в начале вашего additem на false и на true в adddonation. Затем в функции writeitems вы можете проверить значение и использовать его для подготовки вашего вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...