2016-02-09 3 views
-1

Здесь я скрываю тег div при изменении выпадающего меню. Но когда я выбираю любое значение из выпадающего списка, сообщение отображается,ТипError: document.getElementById (...) is null - Сообщение об ошибке

TypeError: document.getElementById(...) is null 
document.getElementById("leavetype").style.visibility = "hidden"; 

Вот мой код:

var leave_type = $(this).attr('data_type'); 
    $('.status_approve').change(function() { 
     if (leave_type == '4') { 
     document.getElementByName("leavetype").style.visibility = "visible"; 
     } else { 
     document.getElementById("leavetype").style.visibility = "hidden"; 
     } 
    }); 
<div class="form-group" id="leavetype"> 
    <label class="col-lg-4 control-label">Emergency leave status</label> 
    <div class="col-lg-8"> 
    <select name="emergencyleavestatus" id="emergencyleavestatus" class="form-control"> 
     <option value="0">Unpaid</option> 
     <option value="1">Paid</option> 
    </select> 
    </div> 
</div> 
<select class="status_approve" data_type="<?php echo $row->leavetype_id;?>"> 
    <option value="">Select Action</option> 
    <option value="1" <?php if($row->hr_approve=="1"){echo 'selected="selected"';} ?>>Approve</option> 
    <option value="2" <?php if($row->hr_approve=="2"){echo 'selected="selected"';} ?>>Reject</option> 
</select> 

Обновлено

+0

'document.getElementByName (" leavetype ")' недействителен JS. Это будет 'document.getElementsByName (" leavetype ") [0]', если у вас есть объект с именем = "leavetype", которого у вас нет. '$ (" # leavetype ")' будет иметь больше смысла – mplungjan

ответ

1

2 Проблемы;

  1. вы должны определить leave_type, прежде чем использовать его в качестве условия
  2. document.getElementByName("leavetype")

Не будет работать, если не является элементом формы с name="leavetype", если вы хотите выбрать по ID, используйте ;

document.getElementByID("leavetype") 
+0

вы не знаете, является ли это глобальной переменной, поэтому «первая» на самом деле не проблема :) – Alex

+0

Я полагаю, это правда. Но поскольку это весь код, который мы должны продолжать, лучше всего понять, что ему нужно определить, на всякий случай: –

+0

IF leave_type не был определен, консоль сообщила бы об этом. Ошибка еще одна –

1

Попробуйте это: вы можете использовать JQuery здесь, чтобы скрыть и показать DIV см ниже код

$('.status_approve').change(function(){ 
     var leave_type = $(this).attr('data_type'); 
     if(leave_type == '4') 
     { 
     $("#leavetype").show(); 
     } 
     else 
     { 
     $("#leavetype").hide(); 
     } 
}); 
+0

Спасибо Bhusan: Но когда я собираюсь использовать вот так, тег div не открывается с помощью hide и show. –

+0

@ViralBhoot, есть ли ошибка в консоли браузера? Кроме того, у вас есть 'leave_type' вне обработчика события изменения, он должен быть внутри него. См. Обновленный ответ. –

+0

Я обновил, как вы сказали, но все же он дает ошибку в консоли: TypeError: Не удается прочитать свойство 'style' от нуля Когда эта ошибка срабатывает? –

0

Вам нужно изменить две вещи, которые используют data-* атрибут опций:

<select class="status_approve"> 
    <option value="">Select Action</option> 
    <option value="1" data-type="1">Approve</option> <!-- here --> 
    <option value="2" data-type="4">Reject</option> <!-- here --> 
</select> 

Теперь вы можете использовать этот скрипт:

$('.status_approve').change(function() { 
 
    var leave_type = $(':selected', this).data('type'); 
 
    $("#leavetype").toggle(leave_type == '4'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="form-group" id="leavetype"> 
 
    <label class="col-lg-4 control-label">Emergency leave status</label> 
 
    <div class="col-lg-8"> 
 
    <select name="emergencyleavestatus" id="emergencyleavestatus" class="form-control"> 
 
     <option value="0">Unpaid</option> 
 
     <option value="1">Paid</option> 
 
    </select> 
 
    </div> 
 
</div> 
 
<select class="status_approve"> 
 
    <option value="">Select Action</option> 
 
    <option value="1" data-type="1">Approve</option> 
 
    <option value="2" data-type="4">Reject</option> 
 
</select>

+0

Почему тип данных совпадает с значением? не имеет никакого смысла – mplungjan

+0

На самом деле я думал предложить со значением, но это может быть другим для пользователя. @mplungjan – Jai

0

Это может быть, что вы не ждете DOM, чтобы быть полностью загружен, прежде чем запрашивать один из его элементов.

Чистый раствор JS:

document.addEventListener('DOMContentLoaded', function(){ 
    // your JS here 
}, false); 

, но так как вы уже используете JQuery или вы могли бы поместить в $ (документ) .ready() и использовать раствор @Bhushan Kawadkar для запроса элемента:

$(function() { 
    // your JS here 
}); 
Смежные вопросы