Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

F_Jr

Trabalhar com javascript apenas em uma determinada parte do código

Recommended Posts

E aí galera beleza?

 

É o seguinte tenho este código logo abaixo:

 

window.history.forward(1);
function noBack() {
  window.history.forward(1);
}

 

Neste código criei uma função onde ele impedi de que o botão de navegação do browser volte para a página anterior, isto se o navegador não com o javascript desabilitado. Estou chamando a minha função dentro da tag <body>, eis o código abaixo:

 

print '<body onload="noBack();" onpageshow="if(event.persisted) noBack;" onunload="">';

 

As minhas dúvidas são as seguintes:

 

1° Esta função só pode ser passada dentro da tag <body>?

2° A minha página index chama as outras páginas dentro de si, possuindo neste caso apenas uma tag <body>. Quero saber se é correto criar um tag <body> dentro de outra tag <body>, sabendo que a página index chama as outras página para dentro de si?

3° Tem como trabalhar esta função apenas em uma parte do código? Isto porque estou estudando e trabalhando com PHP e Javascript. Quando falei que quero usar esta função apenas em uma parte do código, é para ser usado após salvar um registro impdedindo que volte a página anterior.

 

Quem estiver lendo este post e não ficar esclarecido as perguntas que fiz, postarei a parte do código do qual que estou trabalhando. A forma que trabalhei a função funcionou no mozilla firefox, no opera e no safari ele impedi de voltar a página após inserir ou alterar o registro e outra se você não quiser inserir o registro, tem o botão de voltar no formulário que volta para a página anterior assim como os botões de navegação do browser; já no google chrome e no internet explorer se eu tiver no formulário e não quiser inserir um registro, ele não deixa você voltar para a página anterior, aliás nem preciso estar dentro do formulário que mesmo assim não deixa voltar para a página anterior, isso aqui está dando uma dor de cabeça pra min. Quero saber como posso resolver este problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. não você pode usar diretamente no JS q seria algo mais o menos assim:

window.history.forward(1);
function noBack() {
  window.history.forward(1);
}
document.body.onload = "noBack();";

 

2. sim é errado criar 2 tag body dentro de um documento (segundo w3c)

 

3. sim você cria um arquivo js contendo a função e chama ele pela tag script dessa maneira

<script type="text/javascript" src="minha_pasta_js/meu_arquivo_js.js"></script>

 

Você pode aprender muito sobre js e html em: http://www.w3schools.com/

se já intende bem sobre programação não deixe de procurar frameworks js como:

 

Dojo

jQuery

YUI

ExtJS

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí Vadio beleza?

 

É o seguinte acho que não deixe bem esclarecido as minhas perguntas. Quando fiz a minha primeira pergunta:

"1° Esta função só pode ser passada dentro da tag <body>?", o que realmente quero dizer se posso chamar a minha função em outro elemento HTML, por exemplo: na tag div, p, form,..etc.

 

A 2° pergunta entendi, assim quero saber onde a w3c fala especificamente desta parte que não pode ter duas tags body dentro de um documento. O Código abaixo foi aonde que coloquei um outra tag body e chamei a função noBack dentro dele, sabendo que na minha index já tenho a tag body.

 

<div id="form">
 <form action="index.php" method="post" onsubmit="return validarBairro();">
   <fieldset>
     <input type="hidden" name="result" value="bairro" />

     <?php
       if($acao == 'inserirbai'){
          $bairro = "";
          print '<body onload="noBack();" onpageshow="if(event.persisted) noBack;" onunload="">';
          ?>
            <input type="hidden" name="acao" value="salvarbai" />
          <?php
          print '</body>';
       }
       elseif($acao == 'alterarbai') {
          $bairro = $manutencao->_reg->bai_nome;
          ?>
            <input type="hidden" name="acao" value="atualizarbai" />
            <input type="hidden" name="codigo" value="<?php print $manutencao->_reg->bai_codigo; ?>" />
          <?php
       }
     ?>

     <!--*************************************************************************************-->
     <div id="a1">
       <label for="bairro">Bairro.:</label>
       <div class="div_texbox">
         <input type="text" id="bairro" name="bairro" size="42" value="<?php print $bairro;?>" />
       </div>
     </div>

     <!--*************************************************************************************-->
     <div class="button_div">  
       <?php
         if($acao == 'inserirbai'){
            ?>
              <input type="submit" id="cadastrar" name="cadastrar" value="cadastrar" class="buttons" />
            <?php
         }
         elseif($acao == 'alterarbai') {
         ?>
              <input type="submit" id="atualizar" name="atualizar" value="atualizar" class="buttons" />
            <?php
         }
       ?>
       <input type="reset"  id="limpar" name="limpar" value="limpar"  class="buttons" />
       <input type="button" id="voltar" name="Voltar" value="voltar!" class="buttons" />
     </div>
   </fieldset>
 </form>
</div>

 

Quando fiz a terceira pergunta: "3° Tem como trabalhar esta função apenas em uma parte do código?" Assim o código que estou falando é do PHP. O que estou querendo dizer é o exemplo do código que coloquei acima na tag body. A sua resposta entendi, e só pode ser colocada dentro do meu cabeçalho. Assim sei um pouco de Javascript, mas o que estou querendo agora é que estas perguntas atendem a minha necessidade. Espero ter explicado aquilo que estou querendo.

Assim já conheço o site do http://www.w3schools.com/, mesmo assim valeu pela dica. Desde já agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 . tenho quase certeza que sim mas você pode verificar em:

- http://www.w3schools.com/html5/default.asp

tem o "html tags" no menu ali você tem q ir vendo os atributos q cada tag pode receber.

 

2 . não lembro procure ler tudo sobre as especificações w3c pode te esclarecer bastante coisa

 

3 . sim você pode abrir uma tag script no meio do html mas eu não recomendo pq depois fica mto ruim pra dar manutenção

 

 

minha opinião: aprenda sobre "servidor rest", Json, dojo e sobre algum framework php (recomendo o symfony2).

 

você irá criar seu html. seu site só irá se comunicar com o servidor atraves de ajax

utilizando xml ou Json (eu prefiro Json) onde você tem html você terá só html no máximo chamar uma função js q esteja em outro arquivo vo te da um exemplo.:

 

PROJETO/album - Controller: album | Action: index

public function indexAction($format)
   {
       $em = $this->getDoctrine()->getEntityManager();

       $entities = $em->getRepository('AcmeAlbumBundle:Album')->findAll();

       $serializer = new Serializer(array(new GetSetMethodNormalizer), array('json' => new JsonEncoder(),'xml' => new XmlEncoder));

       $entities = $serializer->serialize($entities,$format);

       return new Response($entities);
   }

 

esta parte do código é responsavel por listar todos meus registros da minha entidade Album e retornalos em json ou xml dependendo do formato indicado como parametro...

 

define([
   "dojo/dom",
   "dojo/store/JsonRest",
   "dojo/data/ObjectStore",
   "dojox/grid/DataGrid"

], function(dom, JsonRest, ObjectStore, DataGrid){
   return {
       setGrid: function(){
           employeeStore = new JsonRest({target:"/album", idAttribute:"id"});

           var grid = new DataGrid({
               store: dataStore = new ObjectStore({objectStore: employeeStore}),
               structure: [
                   {name:"Id", field:"id", width: "200px"},
                   {name:"Nome", field:"nome", width: "200px"}
               ]
           });
           grid.placeAt("grid");
           grid.startup();
       }
   };
});

 

código acima é irá fazer a requisição dos dados no controller/action citado acima irá criar o datagrid e o colocará dentro da tag cujo o id seja grid.

 

o html fica assim:

<html>
   <head>
       <link href="{{ asset('dojo/dijit/themes/claro/claro.css') }}" rel="stylesheet" type="text/css" />
       <link href="{{ asset('dojo/dojox/grid/resources/claroGrid.css') }}" rel="stylesheet" type="text/css" />
       <style type="text/css">
       /*Grid needs an explicit height by default*/
       #grid {
           height: 180px;
           width: 450px;
       }
       </style>
       <script type="text/javascript" src="{{asset('dojo/dojoConfig.js')}}"></script>
       <script type="text/javascript" src="{{asset('dojo/dojo/dojo.js')}}"></script>
       <script type="text/javascript">
           require(["dojo/My/MyModule"],function(myModule){
               myModule.setGrid();
           });
       </script>
   </head>
   <body class="claro">
       <div id="grid"></div>
   </body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.