Почему этот перенесенный JavaScript из VB.NET не выполняется?

Я беру старую игрушку VB.NET, которую сделал в 2006 году, и пытаюсь преобразовать ее в HTML / JavaScript / CSS3, чтобы ее функциональные возможности можно было встроить на страницу в Tumblr. Однако мне удалось преобразовать элемент на 99% из формы VB.NET в форму JavaScript. Проблема в том, что товар не кодируется.

Ниже приведен HTML-код моего веб-порта:

<table id="jewelryjiddyapp"><tr>
<td colspan="2"><div id="logofield"><p id="JiddyMainLogo">Jewelry Jiddy's</p>
<p id="JiddySubLogo">Wedding Ring Store</p></div></td>
<td>
<div class="fieldlabel" style="margin-top:25px;">Model Name</div>
<form>
<select id="modelBox">
<option id="heartsinlavaflow">Hearts in Lavaflow</option>
<option id="scarofafrica">Scar of Africa</option>
<option id="monkeysuncle">Monkey's Uncle</option>
<option id="flatteringfool">Flattering Fool</option>
<option id="stealdeal">Steal Deal</option>
<option id="arweethearyet">Arwee Thearyet</option>
<option id="checkbouncer">Checkbouncer</option>
<option id="worthyoursoul">Worth-Your-Soul</option>
<option id="therough">The Rough</option>
<option id="canyudrspecial">Canyu Dr. Special</option>
<option id="viderzhen">Viderzhen</option>
<option id="fiberglasschicken">Fiberglass Chicken</option>
<option id="pinkpuma">Pink Puma</option>
</select>
</form>
<p class="limitnotice">Limit 1 Model Type per Sale</p>
</td>
</tr><tr>
<td>
<div class="fieldlabel">Number of Items</div>
<form id="noifield">
<input id="NOI-1" name="noi" type="radio" />1
<input id="NOI-2" name="noi" type="radio" />2
<input id="NOI-3" name="noi" type="radio" />3
<input id="NOI-4" name="noi" type="radio" />4
<input id="NOI-5" name="noi" type="radio" />5
</form>
<p class="limitnotice">Limit 5 per Sale</p>
</td>
<td>
<div class="fieldlabel">Sales Code</div>
<form>
<select id="saleBox">
<option id="normalsale">Normal</option>
<option id="the25off">25% Off Sale</option>
<option id="the40off">40% Off Sale</option>
<option id="the15off">15% Senior Discount</option>
</select>
</form>
<form style="text-align:center;">
<input class="fieldlabel" id="findSalesTotal" type="button" value="Find Sales Total" 
onclick="findSalesTotal(); return true;" />
</form>
</td>
<td>
<div class="fieldlabel">Total Amount Due</div>
<p id="finalSalesTotal"></p>
</td>
</tr></table>

Вот код JavaScript:

<script language="javascript" type="text/javascript">
function findSalesTotal() {
var itemValue;
var NOI;
var itemTotal;
var SalesCode;
var DueSansTax;
var SalesTax = 1.06;
var TAD;
if (document.getElementById('heartsinlavaflow').selected = true)
{itemValue = 190;}
else if (document.getElementById('scarofafrica').selected = true)
{itemValue = 220;}
else if (document.getElementById('monkeysuncle').selected = true)
{itemValue = 321.15;}
else if (document.getElementById('flatteringfool').selected = true)
{itemValue = 118.65;}
else if (document.getElementById('stealdeal').selected = true)
{itemValue = 5.75;}
else if (document.getElementById('arweethearyet').selected = true)
{itemValue = 88.73;}
else if (document.getElementById('checkbouncer').selected = true)
{itemValue = 532.9;}
else if (document.getElementById('worthyoursoul').selected = true)
{itemValue = 6685.19;}
else if (document.getElementById('therough').selected = true)
{itemValue = 12.18;}
else if (document.getElementById('canyudrspecial').selected = true)
{itemValue = 86.14;}
else if (document.getElementById('viderzhen').selected = true)
{itemValue = 121.15;}
else if (document.getElementById('fiberglasschicken').selected = true)
{itemValue = 132.17;}
else if (document.getElementById('pinkpuma').selected = true)
{itemValue = 93;}
else
{itemValue = 0; 
alert("Select a valid model, Model Select Error");}
if (document.getElementById('NOI-1').checked = true)
{NOI = 1;}
else if (document.getElementById('NOI-2').checked = true)
{NOI = 2;}
else if (document.getElementById('NOI-3').checked = true)
{NOI = 3;}
else if (document.getElementById('NOI-4').checked = true)
{NOI = 4;}
else if (document.getElementById('NOI-5').checked = true)
{NOI = 5;}
else
{NOI = 0; alert("Select a number of items. Number of Items Error");}
if (document.getElementById('normalsale').selected = true)
{SalesCode = 1;}
else if (document.getElementById('the25off').selected = true)
{SalesCode = 0.75;}
else if (document.getElementById('the40off').selected = true)
{SalesCode = 0.6;}
else if (document.getElementById('the15off').selected = true)
{SalesCode = 0.85;}
else
{SalesCode = 0; alert("Invalid Entry, Sales Code Error");}
itemTotal = itemValue * NOI;
DueSansTax = itemTotal * SalesCode;
TAD = DueSansTax * SalesTax
document.getElementById('finalSalesTotal').innerHTML = TAD;}
</script>

Я не специалист по JavaScript, но мне кажется, что сценарий хорошо сформирован. Поэтому я не могу понять, почему он вообще не выполняется. Когда все работает правильно, в поле «Общая сумма к оплате» будет отображаться числовое значение, которое я могу затем проанализировать как деньги, как только узнаю, что получаю результат. Но пока никаких результатов. Есть ли у кого-нибудь предложения перевернуть эту штуку?

Первоначально это было частью задания десять лет назад. Я тогда скомпилировал его на VB.NET, и все работало нормально. Я удалил игровые «чит-коды», которые давали забавные результаты, так как я хочу, чтобы базовый скрипт работал, прежде чем делать его симпатичным.

И нет, я точно не помню, как я это делал в VB.NET. Я не занимался компиляцией программ на таком уровне с 2007 года.

ОБНОВЛЕНИЕ: Спасибо за "окошко". совет. Но теперь возникает новая проблема: он не запоминает выделенные фрагменты. Например: когда я устанавливаю его на «Шрам Африки», он возвращается к «Сердцам в потоке лавы». Когда я устанавливаю радиокнопки на два, они сбрасываются на 1. Когда я выбираю продажу, меня перенаправляют в нормальный режим. Как сохранить выбор данных перед выводом?

PS: Я удалил CSS, поскольку некоторые говорили, что он мешает и в любом случае не является частью проблемы.


person IvanRider    schedule 15.10.2014    source источник
comment
Вы получаете конкретную ошибку? Кроме того, это большой объем кода, который нужно преодолеть - можете ли вы сузить проблему?   -  person sherb    schedule 15.10.2014
comment
Попробуйте изменить onclick="findSalesTotal(); return true;" на onclick="window.findSalesTotal(); return true;".   -  person Stryner    schedule 15.10.2014


Ответы (2)


Ваша проблема в том, что ваш идентификатор кнопки - findSalesTotal, а имя вашей функции - findSalesTotal.

Вот jsfiddle из того, что не работает: http://jsfiddle.net/gzej4jm5/1/ Это действительно работает: http://jsfiddle.net/gzej4jm5/2/

Браузер или движок javascript думают, что вы пытаетесь сослаться на элемент DOM (вашу кнопку) в своем onclick событии.

Либо измените идентификатор своей кнопки, либо измените имя функции и обновите событие onclick кнопки. Я сделал последнее в рабочей скрипке, изменив имя функции на findSalesTotalFunction.

Соответствующий HTML:

<input class="fieldlabel" id="findSalesTotal" type="button" 
value="Find Sales Total" onclick="findSalesTotalFunction(); return true;" />

Соответствующий javascript:

function findSalesTotalFunction()
person ps2goat    schedule 15.10.2014
comment
К сожалению, когда я нажимаю 5 на переключателях, ps2goat по-прежнему выполняет вычисления только для 1, устанавливает модель по умолчанию и устанавливает режим продаж по умолчанию. Это не должно быть по умолчанию. Он должен помнить мой выбор. - person IvanRider; 15.10.2014
comment
Может быть, но ваша основная проблема заключалась в том, что возникали ошибки javascript, из-за которых ваш метод даже не вызывался. - person ps2goat; 15.10.2014

Оказывается, самая большая причина путаницы в форме заключалась в том, что часть «= true» не нужна. Это была лишняя логика. Удалив это, я заставил форму работать. Я даже добавил небольшую настройку, которую нашел здесь:

Как напечатать число с запятыми как разделители тысяч в JavaScript

В этом случае есть запятые. Поскольку я не мог заставить поле «Код продаж» принимать случайные строки, «чит-коды» в версии VB.NET не были перенесены. Но это будет хорошо работать в качестве образца элемента в каталоге Dozerfleet Labs Widgets для порта веб-виджетов. Тем, кто хочет глупых читов, просто нужно скачать версию VB.NET, которая будет предоставлена. Всем спасибо за помощь.

person IvanRider    schedule 15.10.2014