为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红糖糍粑 2022-01-07 19:09:00
我有几个 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')但这也不起作用。在比较中我缺少什么吗?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

您的问题是范围之一。 $(function() {});创建一个闭包,您在该闭包中定义您的变量。闭包外的代码看不到这些变量。要解决此问题,您有几个选项,这里有 2 个可行:


1)像这样将变量移动到闭包之外:


// 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];



// 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 ID

function 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');

});


查看完整回答
反对 回复 2022-01-07
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信