Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подскажите новачку: Не работает в IE, Chrome и Safari (https://javascript.ru/forum/misc/2606-podskazhite-novachku-ne-rabotaet-v-ie-chrome-i-safari.html)

Nichol 22.01.2009 04:24

Подскажите новачку: Не работает в IE, Chrome и Safari
 
Народ плиз подскажите, я только сегодня сел за джава скрипт все вроде радотает, но в IE, Chrome и Safari нехочет. У когото есть идеи?

<script language="JavaScript">
function countit(form) {

	var TicketCount 		= form.TicketCount.value;
	var TicketVipCount	 	= form.TicketVipCount.value;
	var TableCount			= form.TableCount.value;
	
	var TicketPrice			= 40; 
	var TicketVipPrice		= 100; 
	var TablePrice			= 50;
	
	var MyCount				= 278;
	
 if (TicketPrice != '0') {
	var TicketExit			= parseFloat(TicketPrice) * TicketCount;
 }
 else {
	var TicketExit			= 0;
 }
 
 if (TicketVipPrice != '0') {
	var TicketVipExit 		= parseFloat(TicketVipPrice) * TicketVipCount;
 }
 else {
	var TicketVipExit 		= 0;
 }
 
 if (TablePrice != '0') {
	var TableExit 			= parseFloat(TablePrice) * TableCount;
 }
 else {
	var TableExit	 		= 0;
 }
	
	var SumPrice = TicketExit + TicketVipExit + TableExit;

 if (SumPrice >= MyCount) {
    document.getElementById('but').disabled = true;
	var NeedToPay = SumPrice - MyCount;
	document.getElementById('debug').innerHTML = 'ERROR :) '+ NeedToPay +' ';
 }
 else {
    document.getElementById('but').disabled = false;
	document.getElementById('debug').innerHTML = SumPrice.toFixed(2);
 }
 
}
</script>

<form method="POST" onChange="countit(this)">
	<table border="0" cellspacing="4" cellpadding="3">
	<tr><td style="color: #3A7611; vertical-align: middle">Кількість квитків:</td><td><select name="TicketCount" size="1"><option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option></select></td></tr>

	<tr><td style="color: #3A7611; vertical-align: middle">Кількість VIP квитків:</td><td><select name="TicketVipCount" size="1"><option>0</option><option>1</option><option>2</option></select></td></tr>
	<tr><td style="color: #3A7611; vertical-align: middle">Кількість столиків:</td><td><select name="TableCount" size="1"><option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option></select></td></tr>
	</table>

<input type="submit" id="but">
</form>

<div id="debug"></div>

x-yuri 22.01.2009 19:07

откуда у формы onchange? у select, например, есть

к элементам лучше обращаться form.elements['name'].value

var TicketExit =   TicketPrice   ? parseFloat(TicketPrice) * TicketCount
                                 : 0;

Nichol 22.01.2009 23:57

Цитата:

Сообщение от x-yuri (Сообщение 11228)
откуда у формы onchange? у select, например, есть

var TicketExit =   TicketPrice   ? parseFloat(TicketPrice) * TicketCount
                                 : 0;

к сожелению ничего с етого что ти написал я не понял, я ввобщето php програмер а к джава скрипт практически ничего не шарю

Очень било б класно если б кто написал решение с коментариями

Zibba 23.01.2009 01:52

var TicketExit =   TicketPrice   ? parseFloat(TicketPrice) * TicketCount
                                 : 0;


это упрощенная запись:

if (TicketPrice != '0') {
    var TicketExit            = parseFloat(TicketPrice) * TicketCount;
 }
 else {
    var TicketExit            = 0;
 }


С использованием тернарного оператора ? :

И у формы нет метода onchange он есть у элемента select, т.е. Вам нужно вешать обработчик на каждый select, примерно так:
<select name="TicketCount" size="1" onChange="countit(this)">

только в таком случае, для Вашей функции придется передавать не this, а саму форму в которой находится select, либо получать форму из самой функции.

Nichol 23.01.2009 13:59

все вроде понял, только кроме етого:

Цитата:

Сообщение от Zibba (Сообщение 11243)
... либо получать форму из самой функции.


если ктото может навести хоть какой пример.

Zibba 23.01.2009 14:04

Задаете id своей форме например id="form" и дальше получаете при помощи document.getElementById("form");

Nichol 27.01.2009 00:35

Смотрите зделал так:

<script language="JavaScript">
function Count(form) {

	var TicketCount 		= document.getElementById('TicketCount');
	var TicketVipCount 		= document.getElementById('TicketVipCount');
	var TableCount	 		= document.getElementById('TableCount');

	var TicketPrice			= 40; 
	var TicketVipPrice		= 100; 
	var TablePrice			= 50;
	
	var MyCount				= 278;
	
 if (TicketPrice != '0') {
	var TicketExit			= parseFloat(TicketPrice) * TicketCount.value;
 }
 else {
	var TicketExit			= 0;
 }
	
if (TicketVipPrice != '0') {
	var TicketVipExit 		= parseFloat(TicketVipPrice) * TicketVipCount.value;
 }
 else {
	var TicketVipExit 		= 0;
 }
 
 if (TablePrice != '0') {
	var TableExit 			= parseFloat(TablePrice) * TableCount.value;
 }
 else {
	var TableExit	 		= 0;
 }
	
	var SumPrice = TicketExit + TicketVipExit + TableExit;

 if (SumPrice >= MyCount) {
    document.getElementById('but').disabled = true;
	var NeedToPay = SumPrice - MyCount;
	document.getElementById('debug').innerHTML = 'ERROR :) '+ NeedToPay +' ';
	document.getElementById('sum').innerHTML = '';
 }
 else {
    document.getElementById('but').disabled = false;
	document.getElementById('debug').innerHTML = '';
	document.getElementById('sum').innerHTML = SumPrice.toFixed(2);
 }
 
}
</script>


<form method="POST">
	<table border="0" cellspacing="4" cellpadding="3">
		<tr><td style="color: #3A7611; vertical-align: middle; width: 300px">Кількість квитків:</td><td><select id="TicketCount" onChange="Count(this)" name="TicketCount" size="1" style="width: 50px"><option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option><option>13</option><option>14</option><option>15</option><option>16</option><option>17</option><option>18</option><option>19</option><option>20</option></select></td></tr>

		<tr><td style="color: #3A7611; vertical-align: middle">Кількість VIP квитків:</td><td><select id="TicketVipCount" onChange="Count(this)" name="TicketVipCount" size="1" style="width: 50px"><option>0</option><option>1</option><option>2</option></select></td></tr>
		<tr><td style="color: #3A7611; vertical-align: middle">Кількість столиків:</td><td><select id="TableCount" onChange="Count(this)" name="TableCount" size="1" style="width: 50px"><option>0</option><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option><option>6</option><option>7</option><option>8</option><option>9</option><option>10</option><option>11</option><option>12</option></select></td></tr>

	</table>

<input type="submit" id="but" value="увійти" class="buttom_small">
</form>



все вроде нормально, пашет всюда кроме IE. исправте пожалуйста!!!

x-yuri 27.01.2009 01:08

включи отладку в ie (Tools/Internet Options/Advanced/Disable Script Debugging) и посмотри, что ему не нравится

в HTML 4.01 атрибут name тэга form считается deprecated, но по идее можно обращаться к форме по id
document.forms[<formId>].elements[<elementName>]

где <elementName> - значение атрибута name элемента формы

не имеет смысла передавать в функцию this и принимать в ней не используемый параметр form, там более что теперь он указывает на элемент формы

x-yuri 27.01.2009 01:19

хотя можно этот this использовать: переименовать form -> el и писать el.form.elements[<elementName>], чтобы получить доступ к другим элементам формы

Nichol 27.01.2009 02:06

тоесть моя ошибка только в том, что я неверно передаю з поля дание? а все прочиие верно?


Часовой пояс GMT +3, время: 21:23.