2014-03-01 37 views
0

编辑3:正如我在下面提到的,我试图在头文件中初始化对话框,然后在任何页面中使用它。如果我在调用它之前初始化它,它就可以运行,但这意味着每次调用它时都会初始化它。我想多次初始化一次&。在初始化之前调用Jquery UI对话框

在阳光明媚的要求,代码/ HTML顺序如下:

WORDPRESS的header.php

<!DOCTYPE html> 
<html xmlns="http<?php echo (is_ssl())? 's' : ''; ?>://www.w3.org/1999/xhtml" <?php language_attributes(); ?>> 
<head> 
... Wordpress/template stuff here... 
    <script src="../sma-js/jquery-ui-1.10.3/js/jquery-ui-1.10.3.custom.min.js" charset="utf-8"></script> 
    <script src="../sma-js/d3.v3/d3.v3.min.js" charset="utf-8"></script> 
    <script src="../sma-js/d3.tip.min.js" charset="utf-8"></script> 
    <script src="../sma-js/sma.d3.js" charset="utf-8"></script> 
    <script src="../sma-js/google-maps/js/handlebars-1.0.0.js" charset="utf-8"></script> 
    <script src="../sma-js/google-maps/js/jquery.storelocator.js"></script> 
    <script src="../sma-js/moment.min.js" charset="utf-8"></script> 
    <script src="../sma-js/jquery.validate.min.js" charset="utf-8"></script>  
    <script src="../sma-js/sma.js" charset="utf-8"></script> 
    <script type="text/javascript"> 
     jQuery(window).load(function() { 
      jQuery(".loader").fadeOut("slow"); 
     }); 
    </script> 
    <script type="text/javascript"> 
    jQuery(document).ready(function(){ 
     jQuery("#dialog").dialog({ 
      modal: true, 
      autoOpen: false, 
      buttons: { Ok: function() { jQuery(this).dialog("close"); } }, 
      show: { effect: "blind", duration: 1000 }, 
      hide: { effect: "explode", duration: 1000 } 
     }); 
    }); 
    </script> 
</head> 
<?php 
    $body_class = ''; 
    $wrapper_class = ''; 
    if(is_page_template('blank.php')): 
    $body_class = 'body_blank'; 
    $wrapper_class = ' class="wrapper_blank"'; 
    endif; 
?> 

<body <?php body_class(array($avada_color_scheme,$body_class)); ?>> 
    <div class="loader"></div> 
    <div id="dialog" title="ABC" ></div> 

然后在页面模板(后<?php get_footer(); ?>语句)我所说的对话作为其一部分表单提交如下:

WordPress的页面模板 - login.php中

// validate signup form on keyup and submit 
    jQuery("#forgot-pwd").validate({ 
     rules: { 
      email: { 
       required: true, 
       email: true 
      } 
     }, 
     messages: { 
      email: "Please enter a valid email address", 
     }, 
     submitHandler: function(form) { 

      jQuery(".loader").fadeIn("fast"); 

      var ResetPwd = generatePassword(); 
      var ResetSalt = generateSalt(); 

      jQuery.ajax({          
       url: "/sma-php/pwd.php?var=PWDRES&typ=r&ste=" + Base64.encode(jQuery('#user-email').val()) + "&rp=" + Base64.encode(ResetPwd) + "&rs=" + Base64.encode(hex_sha512(ResetSalt)), //the script to call to get data   
       dataType: 'text',                            //data format 
       success: function(data) {                          //on receive of reply 
        jQuery(".loader").fadeOut("fast"); 
        jQuery("#dialog").html(data).dialog("open"); 
       }, 
       error: function(data) {                           //on receive of reply 
        jQuery("#dialog").html("An error occurred while sending you a new password.<br/><br/>Please try again or contact ABC for help...").dialog("open");   
       }, 
       complete: function(data) {                          //on receive of reply 
        jQuery(".loader").fadeOut("fast"); 
       } 
      }); 
     } 
    }); 

编辑2:总之,我试图初始化头中的对话框,然后用它在任何页面;任何地方的身体。如果我在调用它之前初始化它,那么它就可以正常工作......但这意味着每次调用它时都会初始化它。

顺便说一句,我所说的对话框中JS在页面的BODY形式提交的一部分,打开如下:(数据是AJAX调用的结果):

jQuery("#dialog").html(data).dialog("open"); 

编辑:在拉尔的建议,我试图在每头下面同样reult“的文件准备好”:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    jQuery("#dialog").dialog({ 
     modal: true, 
     autoOpen: false, 
     buttons: { Ok: function() { jQuery(this).dialog("close"); } }, 
     show: { effect: "blind", duration: 1000 }, 
     hide: { effect: "explode", duration: 1000 } 
    }); 
}); 
</script> 

我使用JQuery用户界面对话框w^idget但我不断收到(一些,不是所有的函数调用):

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'open' 

我在页面的头部初始化代码(这我理解第一次加载时执行)这样:

<script type="text/javascript"> 
jQuery("#dialog").dialog({ 
    modal: true, 
    autoOpen: false, 
    buttons: { Ok: function() { jQuery(this).dialog("close"); } }, 
    show: { effect: "blind", duration: 1000 }, 
    hide: { effect: "explode", duration: 1000 } 
}); 
</script> 

及以下DIV作为BODY开放标签后的第一条语句:

我打电话,我与JS网页中间的某处对话框的形式提交的一部分,例如,密码重置形式。

这是怎么发生的?我应该在哪里放置这个小部件的div/init JS,以便它按照需要工作?我还没有找到任何具体的信息,所以你的帮助表示赞赏!

+0

最后,我认为你需要使用的document.ready() –

+0

嗨拉尔,您的建议感谢之前缺少结束脚本标签。我也尝试过,结果相同......它似乎只是页面加载时代码运行的顺序... – TheRealPapa

+1

错误本身已足够清晰。你正试图在完全加载之前调用jQuery UI的对话方法。所以首先初始化jQuery Ui然后调用它。 – Praveen

回答

0

试试这个:

<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    jQuery("#dialog").dialog({ 
     modal: true, 
     autoOpen: false, 
     buttons: [{ text:'OK',click: function() 
      {jQuery(this).dialog("close");} 
      }], 
     show: { effect: "blind", duration: 1000 }, 
     hide: { effect: "explode", duration: 1000 } 
    }); 

    $("#dialog").dialog("open"); // just to try, remove this 
}); 
</script> 

样品小提琴:http://jsfiddle.net/sunnykumar08/7j3fA/

+0

嗨Sunny,我把它放在之前的标题中,但结果是一样的。感谢您的建议。 – TheRealPapa

+0

好吧,试试我更新的答案,这是一个语法错误。 –

+0

嗨阳光明媚,同样的结果我害怕。我假设我将代码放在HEAD中?感谢您的建议。 – TheRealPapa

0

从您的标记,我猜jQuery是jQuery用户界面后,叫上一些网页。将所有脚本放在<?php wp_footer(); ?>之后,或者强制它在<?php wp_header(); ?>中加载jQuery,并确保脚本位于其后。

<?php wp_footer(); ?> 

<!-- insert scripts after this point --> 
<script src="../sma-js/jquery-ui-1.10.3/js/jquery-ui-1.10.3.custom.min.js" charset="utf-8"></script> 
<script src="../sma-js/d3.v3/d3.v3.min.js" charset="utf-8"></script> 
<script src="../sma-js/d3.tip.min.js" charset="utf-8"></script> 
<script src="../sma-js/sma.d3.js" charset="utf-8"></script> 
<script src="../sma-js/google-maps/js/handlebars-1.0.0.js" charset="utf-8"></script> 
<script src="../sma-js/google-maps/js/jquery.storelocator.js"></script> 
<script src="../sma-js/moment.min.js" charset="utf-8"></script> 
<script src="../sma-js/jquery.validate.min.js" charset="utf-8"></script>  
<script src="../sma-js/sma.js" charset="utf-8"></script> 
<script type="text/javascript"> 
    jQuery(window).load(function() { 
     jQuery(".loader").fadeOut("slow"); 
    }); 
</script> 
<script type="text/javascript"> 
jQuery(document).ready(function(){ 
    jQuery("#dialog").dialog({ 
     modal: true, 
     autoOpen: false, 
     buttons: { Ok: function() { jQuery(this).dialog("close"); } }, 
     show: { effect: "blind", duration: 1000 }, 
     hide: { effect: "explode", duration: 1000 } 
    }); 
}); 
</script> 

Ps。

在您的标记你的</head>

+1

嗨Akamaozu,这是一个喜剧的错误,在我的最后,由于CYBERDUCK静静地死亡和文件更新本地,但没有在服务器上......闭幕脚本标签是我的复制/粘贴错误,但它是在代码中。感谢您的帮助! – TheRealPapa

+0

没什么大不了的。我发生了更糟糕的事情:) – akamaozu

相关问题