Почему этот вызов jQuery css () не работает? - PullRequest
0 голосов
/ 05 октября 2011

Мне не нужно показывать div в структуре php if.Я делаю:

 <?php
 $a = $_POST['somefiledcomingFromform'] ; //equals 1
if (isset($_POST['submit'])) {

    if($a==1){


      //  echo"<script>$(document).ready(function() { $('.delete').css(\"display\", \"none\")});</script>";
       echo"<script>$('.delete').css(\"display\", \"none\");</script>";

    }
}

    echo"<div class='delete'>Delete me</div>";
    ?>

Но это не работает, div показывает, что не имеет значения, какую строку я использую внутри de, если .. что я делаю неправильно?

Спасибо за миллион

Ответы [ 8 ]

2 голосов
/ 05 октября 2011

Вместо того, чтобы вставлять JavaScript, почему бы вам не сделать что-то вроде этого:

<?php

$a = 1;
if ($a == 1) {
    echo '<div class="delete" style="display:none;">Delete me</div>';

} else {
    echo '<div class="delete">Delete me</div>';
}
1 голос
/ 05 октября 2011

Вы можете сделать:

<?php $a=1; if($a==1) : ?>

<script>
  $(document).ready(function() { 
    $('.delete').css("display", "none")
});
</script>
<?php endif; ?>

<div class='delete'>Delete me</div>

Но я думаю, что лучше сделать следующее:

<?php $a = 1; ?>

<script>
  $(document).ready(function() { 
    $('.delete').css("display", "none")
});
</script>

<div class="<?php echo $a == 1 ? 'delete':'' ?>">Delete me</div>
1 голос
/ 05 октября 2011

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

   <?php
    $a=1;
    if($a==1){
        echo"<div class='delete' style="display:none;">Delete me</div>";
    }
    else{
        echo"<div class='delete'>Delete me</div>";

    }
    ?>
0 голосов
/ 05 октября 2011

Для начала, вы фактически не используете jQuery для изменения PHP.JQuery на стороне клиента, PHP на стороне сервера, и никогда не встречаться.На самом деле происходит то, что вы используете PHP для создания своего HTML-документа, а браузер создаст DOM, которым будет управлять jQuery.

Что касается того, что не так с вашим сценарием, причина, по которой ваш код не работает, состоит в том, что операторы отображаются по порядку.

Следующее не работает:

<script>
    $('.delete').css("display","none");  // div.delete doesn't exist yet
</script>
<div class="delete">Delete me</div>      <!-- Output *after* the jQuery call. -->

Работает следующее:

<script>
    $( function(){                       //wait until document.ready
        $( '.delete' ).hide();           //hide .delete after ready
    } );
</script>
<div class="delete">Delete me</div>      <!-- Output after <script> but will be hidden after document.ready -->

В дополнение к этой проблеме есть несколько «запахов кода», которые могут беспокоить меня по поводу вашего кода.Обратите внимание, что ни одно из них не является технически неправильным, но они, как правило, указывают на другие проблемы .:

  1. Вы используете jQuery для модификации DOM очень простым способом Javascript.
    Вместо изменения CSS, используйте вызов jQuery .hide().
  2. Вы чередуете одинарные и двойные кавычки в эхо PHP
    Вы используете $( '.delete' ).css( "display", "none"); ... почему?
  3. Вы не указываете тип используемого скрипта
    Конечно, JavaScript является наиболее распространенным - но все же лучше явно указатьязык сценариев.
  4. Вы используете подразумеваемые точки с запятой
    Это может вызвать неожиданное поведение в определенных ситуациях, и его следует избегать.
0 голосов
/ 05 октября 2011

Ваш вызов jQuery выполняется до того, как элемент, который получит функцию щелчка, будет напечатан на странице.

Вы можете использовать свою собственную закомментированную строку вместо прямого вызова.

echo"<script>$(document).ready(function() { $('.delete').css(\"display\", \"none\")});</script>";

Если вы хотите использовать свой незакомментированный вызов, вам нужно распечатать его после тега div.

<?php
echo"<div class='delete'>Delete me</div>";

$a=1;
if($a==1){   
echo"<script>$(function(){$('.delete').css(\"display\", \"none\");});</script>";
}
?>
0 голосов
/ 05 октября 2011

Почему вы пытаетесь добиться этого с помощью jQuery?Просто используйте CSS.

Или, по крайней мере, используйте "live" jQuery для решения HIDE / SHOW DIV.Порядок выполнения имеет значение, и я не думаю, что сгенерированный PHP скрипт действительно повлияет на погружение, которое вы строите и показывает после условного PHP.

0 голосов
/ 05 октября 2011

Я думаю, что шкура - лучшая.Оставить css для ваших css файлов?

echo"<script>$('.delete').hide();</script>";

edit: и ваш javascript тоже!

0 голосов
/ 05 октября 2011

Вероятно, потому что ваш скрипт запускается до загрузки div.Попробуйте это:

<?php
$a=1;
if($a==1){   

  //  echo"<script>$(document).ready(function() { $('.delete').css(\"display\", \"none\")});</script>";
   echo"<script>$(function(){$('.delete').css(\"display\", \"none\");});</script>";

}

echo"<div class='delete'>Delete me</div>";
?>
...