JavaScript - Ajuda

Esquece, nabice minha, desculpa. Obviamente que javascript plano assim dentro de PHP vai dar erro de sintaxe :facepalm::facepalm::facepalm:
Bom, deixa me voltar a ter um tempinho, já te re-escrevo o código correctamente. Vai funcionar, mas tem é de ser bem escrito :P

Abraço

EDIT:
Não está incorrecto, não. Tem de dar assim porque estás a fazer aberturas e fechos de php inline. Se é uma boa ideia? talvez não, mas o código precisa de ser re-escrito na mesma, porque assim, não tem sentido, mas assim teria de dar.

PHP:
<?php if(!empty($errors)): ?>
<script>
    $(document).ready(function() {
        $("html, body").animate({
              scrollTop: $("#val_errors").offset().top
        }, 2000);
    });
</script>
<div id="val_errors">
<?php foreach($errors as $error): ?>
        <div class="alert alert-warning" role="alert"><?php echo $error; ?></div>
<?php endforeach; ?>
</div>
<?php endif; ?>

A forma como está não dá ( já testei )
 
PHP:
<?php
$html = "";
if(!empty($errors))
{
    $html.='
        <script>
            $(document).ready(function() {
                $("html, body").animate({
                      scrollTop: $("#val_errors").offset().top
                }, 2000);
            });
        </script>
    ';
    $html.='<div id="val_errors">';
    foreach($errors as $error)
    {
        $html.='<div class="alert alert-warning" role="alert">' . echo $error . '</div>';
    }
    $html.='</div>';
  
    return $html;
}
?>

Assim deverá funcionar. Se não der, faz replace do return por print.

Abraço
 
PHP:
<?php
$html = "";
if(!empty($errors))
{
    $html.='
        <script>
            $(document).ready(function() {
                $("html, body").animate({
                      scrollTop: $("#val_errors").offset().top
                }, 2000);
            });
        </script>
    ';
    $html.='<div id="val_errors">';
    foreach($errors as $error)
    {
        $html.='<div class="alert alert-warning" role="alert">' . echo $error . '</div>';
    }
    $html.='</div>';
 
    return $html;
}
?>

Assim deverá funcionar. Se não der, faz replace do return por print.

Abraço

A concatenação na linha $html.='<div class="alert alert-warning" role="alert">' . echo $error . '</div>'; dá erro
 
ok, ja vi os screens. A pergunta é: os erros em baixo, estão lá? é só o auto-scroll que não é feito, certo?
Se puseres o javascript na consola de debug do Google Chrome, o que é que acontece? ele faz o scroll?

$(document).ready(function() {
$("html, body").animate({
scrollTop: $("#val_errors").offset().top
}, 2000);
});

EDIT: Já agora, se puderes por aqui o source code que o browser te dá nesta parte dos erros, para ver se o script passa, era perfeito, por favor.
 
ok, ja vi os screens. A pergunta é: os erros em baixo, estão lá? é só o auto-scroll que não é feito, certo?
Se puseres o javascript na consola de debug do Google Chrome, o que é que acontece? ele faz o scroll?

$(document).ready(function() {
$("html, body").animate({
scrollTop: $("#val_errors").offset().top
}, 2000);
});

EDIT: Já agora, se puderes por aqui o source code que o browser te dá nesta parte dos erros, para ver se o script passa, era perfeito, por favor.

os erros estão lá. sim, o auto-scroll não está a ser feito. Não faz o scroll no debug do Google Chrome.

print: https://prnt.sc/t718iu
 
Última edição:
ok, pelo menos o PHP está a funcionar bem. Menos mal.
A pergunta é: o Javascript que está a ser injectado no PHP, aparece quando fazes view source a essa página?
 
Acabei de fazer um teste aqui no fórum, na janela de debug do chrome com este código:
Código:
$("html, body").animate({
scrollTop: $("#post-16523915").offset().top
}, 2000);

E ele fez o scroll com animação. Significa que ou o ID não está a fazer match com o id da div, ou o PHP não está a entregar todo o código como deveria.
 
Acabei de fazer um teste aqui no fórum, na janela de debug do chrome com este código:
Código:
$("html, body").animate({
scrollTop: $("#post-16523915").offset().top
}, 2000);

E ele fez o scroll com animação. Significa que ou o ID não está a fazer match com o id da div, ou o PHP não está a entregar todo o código como deveria.

Quando clico no botão reservar, e estou a observar o debug, aparece um sublinhado vermelho e um x vermelho à frente desta linha $(document).ready(function() { ... }

O erro só pode estar aí
 
NÃO, como está dentro do PHP não aparece no view source

isso é estranho, porque ele apreenta-te os erros, logo o PHP está a entregar-te esses erros. Assumo que tenhas substituido o teu código antigo pelo novo que te passei.

Experimenta colocar a linha que tem o javascript todo numa linha assim:
PHP:
$html.='<script>$(document).ready(function() {$("html, body").animate({scrollTop: $("#val_errors").offset().top}, 2000);});</script>';
 
isso é estranho, porque ele apreenta-te os erros, logo o PHP está a entregar-te esses erros. Assumo que tenhas substituido o teu código antigo pelo novo que te passei.

Experimenta colocar a linha que tem o javascript todo numa linha assim:
PHP:
$html.='<script>$(document).ready(function() {$("html, body").animate({scrollTop: $("#val_errors").offset().top}, 2000);});</script>';

Fica igual!
 
não faz sentido...

No view-source do chrome, faz uma pesquisa por esta string:
val_errors

Se não a encontrares, então o PHP que te passei nºao está a ser processado, e poderá ser um problema de cache. Tenta limpar a cache do teu CMS (penso que seja wordpress).
 
não faz sentido...

No view-source do chrome, faz uma pesquisa por esta string:
val_errors

Se não a encontrares, então o PHP que te passei nºao está a ser processado, e poderá ser um problema de cache. Tenta limpar a cache do teu CMS (penso que seja wordpress).

Não encontra! O penso que o PHP está a ser processado pois ele mostra os erros!

PHP:
 <?php
        $html = "";
        if(!empty($errors))
        {
            $html.='<script>$(document).ready(function() {$("html, body").animate({scrollTop: $("#val_errors").offset().top}, 2000);});</script>';
            $html.='<div id="val_errors">';
            foreach($errors as $error)
            {
                $html.='<div class="alert alert-warning" role="alert">' . $error . '</div>';
            }
            $html.='</div>';
      
            print $html;
        }
    ?>
 
por aquilo que explicas, isso é um problema de cache do CMS. Tenta limpar a cache, porque de outra maneira isso não vai lá.
Atenção que eu não tenho experiência com wordpress, não te consigo ajudar nesse sentido, pois estou habituado a trabalhar com outros CMSs como o MODx e o Joomla, mas isso é claramente um problema de cache.

Tenta ver aqui se te ajuda. Esse código que te passei vai fazer o que precisas.

Abraço e boa sorte
 
Back
Topo