JQuery не переходит на следующую страницу - PullRequest
0 голосов
/ 26 мая 2011

У меня есть jquery, но он не переходит на следующую страницу, он всегда отображает изображения и ждет, никогда не переходит на следующую страницу.

HTML-код:

<div id="toHide" class="pb-text-align-center">
    <img style="display: inline" src="img/load.gif" />
    <form wicket:id="safeForm" class="clearfix">
        <input type="hidden" wicket:id="submitted" value="false" />
    </form>
</div>

Исходный код HTML:

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();  
   $('.toHide').show().doTimeout(100,function() { 
   $('.toHide').find('safeForma3').submit();});
</SCRIPT>

код калитки:

static private class SafeSubmitBehaviour extends AbstractBehavior{
      public void onRendered( Component component ) {
          super.onRendered( component );      
          StringBuffer buffer = new StringBuffer(200);
          buffer.append("<script type=\"text/javascript\" >\n");
          buffer.append("var $ = jQuery.noConflict();\n "); 
          buffer.append(" $('.toHide').show().doTimeout(100,function() {  $('.toHide').find('");
          buffer.append(component.getMarkupId()).append("').submit();});\n</script>");
          component.getResponse().write(buffer);
        }  
  } 
      buffer.append(component.getMarkupId()).append("').submit();});\n</script>");

Я пробовал с: $ ('. ToHide'). Find ('form'). Submit ();}) ;.Но все равно бесполезно.

После того, как $ ('. ToHide') переходит в $ ('# toHide'), страница переходит на следующую страницу, но анимация не происходит в IE6 / 7, она отлично работает вFF.

Ответы [ 5 ]

4 голосов
/ 26 мая 2011

"toHide" <div> имеет эту строку, так как это id значение, а не его класс, поэтому вам нужно:

 $('#toHide')

Селектор ".toHide" ищет элемент с "toHide" как часть класса, так что он не найдет ваш <div> вообще.

Чтобы найти форму, вы должны использовать

 $('#toHide form').submit();
1 голос
/ 26 мая 2011

Это проблема с IE, если у вас есть GIF, который не отображается, а затем установите его как видимый, анимация не работает.

Лучше всего просто использовать пустой тег изображения, например <img src='' />, а затем, когда вы хотите, чтобы он стал видимым, установить src на правильный путь, т.е.

Это должно работать, если вы делаете это таким образом.

EDIT

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

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();       
   $('#toHide').show();
   $('#loadingImg').attr('src', 'img/load.gif');
   setTimeout(function() {
       $('#toHide').find('safeForma3').submit();
   }, 100);
</SCRIPT>

HTML-код:

<div id="toHide" class="pb-text-align-center">
    <img id="loadingImg" style="display:inline" src="" />
    <form wicket:id="safeForm" class="clearfix">
        <input type="hidden" wicket:id="submitted" value="false" />
    </form>
</div>

Попробуйте, возможно, захотите немного поиграться.

1 голос
/ 26 мая 2011

Другие упоминали о проблеме с вашим селектором.

Однако этот код также отображается голым между двумя тегами script. Это означает, что они будут выполнены, как только они будут проанализированы. Это означает, что они могут быть выполнены до загрузки всего DOM, что делает их неэффективными.

Вам нужно использовать что-то вроде этого:

<SCRIPT type="text/javascript">  
   var $ = jQuery.noConflict();  
   $(document).ready(function(){
       $('#toHide').show().doTimeout(100,function() { 
           $('#safeForma3').submit();
       });
   });
</SCRIPT>
1 голос
/ 26 мая 2011

Я думаю, вы должны попробовать это:

$('#toHide').find('form').submit();

Или, если на форме есть идентификатор (я не знаком с Wicket), вы можете просто использовать:

$('#safeForm').submit();

В селекторе идентификаторов используется символ "#", а не ".", Который является префиксом селектора класса.

1 голос
/ 26 мая 2011

В вашем HTML нет идентификатора с именем safeForm15, который пытается выбрать ваш setTimeout. На самом деле, форма имеет идентификатор namespaced, который я считаю незаконным с самого начала.

В любом случае, быстрое решение состоит в том, чтобы отключить «toHide» и избавиться от бита component.getMarkupId.

$('#toHide').find('form').submit();

Добавлено:

Вам нужно изменить это:

  buffer.append("  setTimeout(function(){ $(\"#").append(component.getMarkupId()).append("\").submit()}, 100);\n"); 

к этому:

  buffer.append("  setTimeout(function(){$('#toHide').find('form').submit();}, 100);\n"); 
...