自定义字段的 WordPress jQuery 空输入值

WordPress jQuery empty input value for a custom field

提问人:Java Broker 提问时间:11/2/2023 更新时间:11/2/2023 访问量:32

问:

我试图使用 JS 获取自定义帖子类型的自定义帖子字段的输入值,但没有成功。检查 jQuery 对象时,没有 value 属性。 该代码在 WordPress 之外工作,甚至适用于不同的输入,即核心 WP 标题输入字段。最终目标是使用 Ajax 检查数据库中是否存在值。

遵循以下示例:https://developer.wordpress.org/plugins/metadata/custom-meta-boxes/#client-side-code

jQuery v3.4.1 中, WP v6.3版本

自定义元框输入字段 HTML:

<input type="url" name="myprefix-item-url" id="myprefix-item-url" value="" style="width: 100%;">

核心 WP 标题输入字段 HTML:

<input type="text" name="post_title" size="30" value="" id="title" spellcheck="true" autocomplete="off">

WSG集团

// wp-content/plugins/my-plugin/admin/meta-boxes/js/admin.js

(function ($, window, document) {
    'use strict';
    // execute when the DOM is ready
    $(document).ready(function () {
        // NOTE: works for #title
        $('#myprefix-item-url').on('change', function () {
            const userInput = $(this).val();
            console.log('input:', userInput);
        });
    });
}(jQuery, window, document));

PHP格式:

// wp-contents/plugins/my-plugin/my-plugin.php

function myprefix_meta_box_scripts() {
    // get current admin screen, or null
    $screen = get_current_screen();
    // verify admin screen object
    if (is_object($screen)) {
        // enqueue only for specific post types
        if (in_array($screen->post_type, ['myprefix_item'])) {
            // enqueue script
            wp_enqueue_script('myprefix_meta_box_script', plugin_dir_url(__FILE__) . 'admin/meta-boxes/js/admin.js', ['jquery']);
            // localize script, create a custom js object
            wp_localize_script(
                'myprefix_meta_box_script',
                'myprefix_meta_box_obj',
                [
                    'url' => admin_url('admin-ajax.php'),
                ]
            );
        }
    }
}
add_action('admin_enqueue_scripts', 'myprefix_meta_box_scripts');

控制台中的结果:

input: 

JsFiddle:

(function ($, window, document) {
    'use strict';
    // execute when the DOM is ready
    $(document).ready(function () {
        $('#myprefix-item-url').on('change', function () {
            const userInput = $(this).val();
            console.log('url:', userInput);
        });
    });
}(jQuery, window, document));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="url" name="myprefix-item-url" id="myprefix-item-url" value="" style="width: 100%;">

请帮我了解发生了什么

javascript php jquery wordpress 自定义后类型

评论

1赞 Klaassiek 11/2/2023
您是否意识到您发布的代码片段确实有效?
0赞 Java Broker 11/2/2023
@Klaassiek “代码在 WordPress 之外工作,甚至适用于不同的输入,即核心 WP 标题输入字段。”
0赞 freedomn-m 11/2/2023
因此,它适用于基于不同 id 的其他输入,并且它与相同的 id 隔离工作 - 因此 id 一定存在问题:就在那行之前,添加 - 我冒昧地猜测这将给出 0 或 >1(即不是 ===1)$('#myprefix-item-url')console.log($('[id="myprefix-item-url"]').length)
1赞 freedomn-m 11/2/2023
因此,在事件处理程序启动时,您要么有多个具有相同 ID 的输入,要么将事件处理程序分配给错误的输入,因此它“不起作用”,要么该元素当时不存在。如果它以后确实存在(我假设它不存在,否则你从哪里获得 ID),那么在生成元素后,你需要稍后添加你的事件处理程序。或者,使用事件委派 - 更改为 .$("#id").on("change", function...$(document).on("change", "#id", function...
0赞 Java Broker 11/2/2023
@freedomn-m 记录长度为 2。此外,检查页面的源代码显示输入被包装在具有相同 ID 的 div 中。事实上,我有多个具有相同 ID 的元素。我将$('#myprefix-item-url')更改为$('#myprefix-item-url input')以定位正确的元素,它现在可以工作了。谢谢。

答: 暂无答案