IE6 отображает ошибку JavaScript для указанной ниже функции, а ошибка также упоминается ниже - PullRequest
0 голосов
/ 08 октября 2010

у меня есть функция

function setbid(catid)
{
if(catid == 30)
{

document.getElementById('bannerid').value = 1;

}
else if(catid == 31){
document.getElementById('bannerid').value = 2;
}
else if(catid == 32){
document.getElementById('bannerid').value = 6;
}
}

эта функция вызывается событием onchange поля выбора.

теперь, когда значение поля выбора изменяется, IE выдает мне ошибку, говорящую

"document.getElementId (....)" является нулевым или не является объектом ..

Теперь, что я могу из этого сделать?

пожалуйста, помогите ..

UPDATE

Согласно ответу Давида как я могу проверить его наличие до присвоения значения этому полю? Также другие браузеры не отображают эту ошибку, у меня есть это поле bannerid как скрытое поле в документе ... Что нужно сделать?

Ниже приведен снимок экрана с ошибкой, отображаемой в окне выбора. alt text

Обновление 2 Обновление согласно ответу @ haylem

<script>
function setbid(catid)
{
var lookup = {
    '30' : 1,
    '31' : 2,
    '32' : 6
  };

  if (lookup.hasOwnProperty(catid)) {
    var el = document.getElementById('bannerid');

    if (el) {
      el.value = lookup[catid];
    }
  }
/*if(catid == 30)
{
if(typeof(document.getElementById('bannerid')) == null ){
document.getElementById('bannerid').value = 1;
}
}
else if(catid == 31){
document.getElementById('bannerid').value = 2;
}
else if(catid == 32){
document.getElementById('bannerid').value = 6;
}*/
}
</script>

<div style="margin:0px auto">
<div class="instantprice-popup-bg">
<form name="instantpop" id="instantpop" action="" method="post" style="margin:0px; padding:0px" onsubmit="">
    <input type="hidden" name="sessid" id="sessid" value="<?php echo $_GET['osCsid'];?>">
<div class="instantprice">

            <ul>
                <li class="text12pt" style="color:#FF0000; display:none;" id="appsize">For special low price on sizes over 30ft. wide and 10ft. height contact us on sales@bannerbuzz.com.</li>
                <li class="text12pt" style="color:#FF0000; display:none;" id="vinylsize">Please enter width upto 30 ft & height upto 5 ft for Vinyl Signs/Decals(Posters).</li>

                <li class="col1">Select Product</li>
                <li class="col2">

                    <input type="hidden" name="price" id="price" value="<?php echo "15"; ?>" />
                    <input type="hidden" name="bannerid" id="bannerid" value="" />
                    <select name="product" class="dropdownfield" id="product" style="width: 180px;" onchange="javascript:setbid(document.getElementById('product').value);">
                    <option value="">Select Product</option>
                    <?php
                        while($result=mysql_fetch_object($sql_query))
                        {
                            ?><option value="<?php echo $result->categories_id;?>" <?php if($_POST['product'] == $result->categories_id) {?> selected="selected" <?php } ?>><?php echo $result->categories_name;?></option><?php 
                        }
                    ?>
                    </select>

                </li>
                <li class="col1">Select Size (in ft.)</li>
                <li class="col2">
                    <div class="sizebox" style="width:250px;">
                        <div class="sizebox col1"><input name="size_w" id="size_w" type="text" class="sizetextfield1" value="<?php if(isset($_REQUEST['size_w'])){ echo $_REQUEST['size_w']; } else { echo "2"; } ?>" ></div>
                        <div class="sizebox col2"><img src="images/homepage/up-arrow.jpg" width="12" height="9" border="0" align="top" onclick="increaseCounter('size_w')" /><img src="images/homepage/down-arrow.jpg" width="12" height="9" border="0" onclick="decreaseCounter('size_w');" /></div>
                        <div class="sizebox col3"  style="width:35px;">width</div>
                        <div class="sizebox col1"><input name="size_h" id="size_h" type="text" class="sizetextfield1" value="<?php if(isset($_REQUEST['size_h'])){ echo $_REQUEST['size_h']; } else { echo "2"; } ?>" style="margin-left:8px" ></div>
                        <div class="sizebox col2"><img src="images/homepage/up-arrow.jpg" width="12" height="9" border="0" align="top" onclick="increaseCounter('size_h');" /><img src="images/homepage/down-arrow.jpg" width="12" height="9" border="0" onclick="decreaseCounter('size_h');" /></div>
                        <div class="sizebox col3" style="width:35px;">&nbsp;height</div>
                        <input name="size" id="size" type="hidden" value="<?php echo $_REQUEST['size_h'].'x'.$_REQUEST['size_w']; ?>">
                    </div>
                </li>
                <li class="col1">Select Quantity</li>
                <li class="col2">
                    <select id="qty" name="qty" >
                        <?php 
                            for($i=1;$i<=100;$i++)
                            {
                                ?> <option value="<?php echo $i;?>" <?php if($_POST['qty'] == $i) {?> selected="selected" <?php } ?>><?php echo $i;?></option> <?php
                            }
                        ?>
                    </select>
                </li>
                <li class="col1">Select Shipping</li>
                <li class="col2">
                    <select id="shipping_method" name="shipping_method" class="dropdownfield" >
                        <option value="">Select Shipping</option>
                        <option value="standard" <?php if($_POST['shipping_method'] == 'standard') {?> selected="selected" <?php } ?>>Standard (7 - 12 days from proof)</option>
                        <option value="expedited"<?php if($_POST['shipping_method'] == 'expedited') {?> selected="selected" <?php } ?>>Expedited (5 work days from Proof)</option>
                    </select>
                </li>
                <li class="col1" id="sidehead">Two Side Banner</li>
                <li class="col2" id="sideval">
                    <input type="checkbox" id="side" name="side" value="1"  />
                </li>
                <li class="col1">Product Price</li>
                <li class="col2"><span class="text15pt" id="total_display">$0</span>
                    <input type="hidden" id="total" name="total" class="textfield" value="15" readonly="readonly" style="width:60px;"/>
                </li>

                <li class="col1">Shipping Cost</li>
                <li class="col2"><span class="text15pt" id="shipping_display">$0</span>
                    <input type="hidden" id="shipping" name="shipping" class="textfield" value="" readonly="readonly" style="width:60px;" />
                </li>
                <li class="bannerprice" id="grand_total_display">TOTAL PRICE : $0

                </li><input type="hidden" id="grand_total" name="grand_total" value="" readonly="readonly" style="width:60px;" />
                <li style="float:none; text-align:center">

                    <input type="submit" class="getprice-btn" name="getprice" value="" />

                </li>
                <li class="text12pt">Final Price, No Hidden Charges</li>
            </ul>
            <input type="hidden" name="getpriceclick" value="1" />
        </div>
        </form>
</div>
</div>

Ответы [ 5 ]

5 голосов
/ 08 октября 2010

Что я могу из этого сделать?

Что в документе нет элемента с идентификатором bannerid .

2 голосов
/ 08 октября 2010

Переписать как:

function setbid(catid) {
  var lookup = {
    '30' : 1,
    '31' : 2,
    '32' : 6
  };

  if (lookup.hasOwnProperty(catid)) {
    var el = document.getElementById('bannerid');

    if (el) {
      el.value = lookup[catid];
    }
  }
}

И убедитесь, что есть элемент с атрибутом id точно , записанный как bannerid .

Функция, которую я вам даю, немного отличается от вашей:

  • использование таблицы поиска для получения значений вместо цепочек if (особенно, если вы добавите значения позже)
  • выполняет поиск элемента только в одной части кода вместо дублирования
  • проверка существования элемента

РЕДАКТИРОВАТЬ для обновления2 :

Примечание, имеющее непосредственное отношение к вашей проблеме, но:

  • Скорее всего, ваш скрипт должен находиться в разделе <head>
  • Вы должны использовать прогрессивное улучшение, чтобы реагировать на события, а не искажать код HTML и JavaScript. Вместо этого используйте перехват событий.

Также проверьте исходный код отображаемой страницы, чтобы увидеть, не были ли некоторые элементы обработаны средством визуализации из-за неправильной работы или вашим кодом PHP.

EDIT:

Если я тестирую со следующим, он отлично работает:

<script>
function setbid(catid)
{
var lookup = {
    '30' : 1,
    '31' : 2,
    '32' : 6
  };

  if (lookup.hasOwnProperty(catid)) {
    var el = document.getElementById('bannerid');

    if (el) {
      el.value = lookup[catid];
      alert('done [' + el.value + ']');
    }
  }

}
</script>

<div style="margin:0px auto">
<div class="instantprice-popup-bg">
<form name="instantpop" id="instantpop" action="" method="post" style="margin:0px; padding:0px" onsubmit="">
    <input type="hidden" name="sessid" id="sessid" value="<?php echo $_GET['osCsid'];?>">
<div class="instantprice">

            <ul>
                <li class="text12pt" style="color:#FF0000; display:none;" id="appsize">For special low price on sizes over 30ft. wide and 10ft. height contact us on sales@bannerbuzz.com.</li>
                <li class="text12pt" style="color:#FF0000; display:none;" id="vinylsize">Please enter width upto 30 ft & height upto 5 ft for Vinyl Signs/Decals(Posters).</li>

                <li class="col1">Select Product</li>
                <li class="col2">

                    <input type="hidden" name="price" id="price" value="15" />
                    <input type="hidden" name="bannerid" id="bannerid" value="" />
                    <select name="product" class="dropdownfield" id="product" style="width: 180px;" onchange="javascript:setbid(document.getElementById('product').value);">
                    <option value="">Select Product</option>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                    <option value="30">30</option>
                    <option value="31">31</option>
                    <option value="32">32</option>
                    </select></li>
            </ul>
            <input type="hidden" name="getpriceclick" value="1" />
        </div>
        </form>
</div>
</div>

Итак, у вас есть что-то испорченное. Я подозреваю, что в вашем PHP-коде что-то идет не так и выдает некорректный вывод.

1 голос
/ 08 октября 2010

Если элемент не существует в DOM при выполнении этой функции, document.getElementById (...) вернет значение null (или не определено).

Всегда лучше использовать инспектор сценариев (например,FireBug или консоль Safari) во время разработки.Если вы должны разрабатывать в IE6, возможно, вы захотите выполнить проверку путем постепенного «оповещения» ing.

Рекомендуемые выходные данные отладки:

alert(document.getElementById);
alert(document.getElementById("bannerid"));
alert(document.getElementById("bannerid").value);
0 голосов
/ 08 октября 2010
 <script type="text/javascript">
function notEmpty(){

    var myTextField = document.getElementById('myText');

    if(myTextField.value != "")
      {
        alert("You entered: " + myTextField.value)
            alert(document.getElementById('myText1').value=0);
      }
    else
        alert("Would you please enter some text?")      
}
</script>
<input type='text' id='myText' />
<input type='text' id='myText1' />
<input type='button' onclick='notEmpty()' value='click' />

Попробуйте этот пример

0 голосов
/ 08 октября 2010

Вы просто активируете это скрытое поле и проверяете, имеет ли это поле какое-либо значение, пока браузер выдает ошибку.

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