猿问

jQuery函数中的PHP变量未正确传递

我有几个 jQuery 函数,它们使用 wordpresswp_localize_scripts函数将 PHP 数据传递给 JS函数:


function mb_scripts_settings() {


    // blanks

    $mb_ajax_form_type = $mb_get_page_slug = $mb_redirect = $mb_redirect_time = $mb_form_disable = $mb_array = '';


    // get the form type

    $mb_ajax_form_type      = ( is_front_page() ? 'change'  : 'submit'  );


    // get the page slug from ID

    $mb_get_page_slug       = get_post_field( 'post_name', get_the_ID() );


    // if the page is admin or password

    if( is_page( array('admin', 'pw') ) ) {

        $mb_redirect        = true;

        $mb_redirect_time   = 3000;

        $mb_form_disable    = true;


        if( is_page('admin') ) {

            // generate the url for redirection

            $mb_form_area           = ( ( is_page('admin') && isset($_GET['mbtab']) )   ? $_GET['mbtab']    : null      );

            $mb_form_area_url       = ( empty($mb_form_area)    ? '/' : '/admin/?mbtab=' . $mb_form_area . '&mbform=1'  );

            $mb_form_area_url       = get_home_url( $mb_form_area_url );

        }

    }


    // if the page is front

    if( is_front_page() ) {

        $mb_redirect        = false;

        $mb_redirect_time   = 0;

        $mb_form_disable    = false;

        $mb_get_page_slug   = 'front_page';

        $mb_form_area = $mb_form_area_url = null;

    }


    // build the array

    $mb_array = array(

                $mb_ajax_form_type,

                $mb_get_page_slug,

                $mb_redirect,

                $mb_redirect_time,

                $mb_form_disable

            );


    return $mb_array;

}


但是,当它没有通过数组传递并且全部硬编码时,它似乎并没有像我想象的那样mb_form_type工作。直到我用'.' + mb_form_type.


现在它在complete:函数上吐出一个错误,但我也尝试将 if 语句设置为比较为String()==String(mb_get_page_slug) == String('admin')但这也不起作用。


在比较中我缺少什么吗?


红糖糍粑
浏览 140回答 1
1回答

噜噜哒

您的问题是范围之一。 $(function() {});创建一个闭包,您在该闭包中定义您的变量。闭包外的代码看不到这些变量。要解决此问题,您有几个选项,这里有 2 个可行:1)像这样将变量移动到闭包之外:// varvar mb_form_type        = mb_mbtheme_js[0],    mb_form_type        = '.' + mb_form_type,    mb_get_page_slug    = mb_mbtheme_js[1],    mb_redirect         = mb_mbtheme_js[2],    mb_redirect_time    = mb_mbtheme_js[3],    mb_form_disable     = mb_mbtheme_js[4];// create the script$(function() {    // trigger the ajax on form type    // $("#mb_ajax_form") + mb_form_type + ( function( mb_ajax_form ) {    $("#mb_ajax_form").change( function( mb_ajax_form ) {        // stop the default function of buttons        mb_ajax_form.preventDefault();        // do the ajax        mb_ajax_form_js();    });});// accept the form IDfunction mb_ajax_form_js() {    // your code here...omitted for brevity }2)像这样在闭包内移动你的函数(注意,任何调用mb_ajax_form_js也需要在闭包内):// create the script$(function() {    // var    var mb_form_type        = mb_mbtheme_js[0],        mb_form_type        = '.' + mb_form_type,        mb_get_page_slug    = mb_mbtheme_js[1],        mb_redirect         = mb_mbtheme_js[2],        mb_redirect_time    = mb_mbtheme_js[3],        mb_form_disable     = mb_mbtheme_js[4];    // trigger the ajax on form type    // $("#mb_ajax_form") + mb_form_type + ( function( mb_ajax_form ) {    $("#mb_ajax_form").change( function( mb_ajax_form ) {        // stop the default function of buttons        mb_ajax_form.preventDefault();        // do the ajax        mb_ajax_form_js();    });    // accept the form ID    function mb_ajax_form_js() {        // your code here...omitted for brevity     }});更新:要使用字符串变量 ( )访问submitandchange函数mb_form_type,您需要使用“数组访问语法”而不是您尝试过的点表示法。作为一个简单的示例,这将起作用(注意 mb_form_type 不包含.):var mb_form_type = 'change';$("#mb_ajax_form")[mb_form_type]( function( mb_ajax_form ) {    alert('This will work using array access syntax');});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答