2015-05-03 4 views
0

После обнаружения того, что скрытый атрибут работает только с html5 и последними браузерами, я мог бы найти другой способ скрыть контент на основе условных операторов. Я столкнулся с проблемой, когда функция в javascript, похоже, не выполняется, короче говоря, она не скрывает первый абзац.Функция отсоединения в javascript, вызванная из Razor

<!DOCTYPE html> 
<html> 
<head> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> 
<script type="text/javascript"> 

$(document).ready(function(){ 

    function DetachEmptyField(pattern) { 
    $("#pattern").val(pattern); 
    $(pattern).detach(); 
    } 

}); 

</script> 
</head> 
<body> 
<p id="hideMe">This is a paragraph, 1.</p> 
<p>This is another paragraph, 2.</p> 

<button>Remove paragraph 1</button> 

@* Razor conditional statements to be added later here ... *@ 
<script type="text/javascript">DetachEmptyField("#hideMe");</script> 


</body> 
</html> 

ответ

1

DetachEmptyField функция не доступна в глобальном масштабе (она живет внутри ready обратного вызова) и, следовательно, ваш вызов не будет работать. Если вы действительно хотите назвать это как этот

<script type="text/javascript">DetachEmptyField("#hideMe");</script> 

вам придется объявить его в глобальном масштабе (помните, что это плохая практика)

// global function 
function DetachEmptyField(pattern) { 
$("#pattern").val(pattern); 
$(pattern).detach(); 
} 

$(document).ready(function(){ 

}); 

В любом случае, если вам просто нужно чтобы скрыть элемент, вы можете использовать css "display: none", или если вы можете проверить на стороне сервера, должен ли элемент присутствовать на странице, вы можете просто не включать этот абзац в ответ.

@if (/*some condition that needs to be true in order to display the <p> */) { 
    @: <p id="hideMe">This is a paragraph, 1.</p> 
} 
Смежные вопросы