getElementById从WP变量返回空

时间:2017-10-17 12:15:45

标签: javascript wordpress widget

所以我有这个基于wordpress标准编写的小部件。我声明了一种变量,可以同时使用后端和前端。

public function widget( $args, $instance ) {

    global $post;

    $sid = $instance['id'];

    $name = $instance['name'];

    $args = array( 'post_type' => 'content_manager','post_id' => $sid);

    $query = new WP_Query( $args );

    echo $args['before_widget'];

    echo $args['after_widget'];

}

public function form( $instance ) {

    global $post;

    $args = array( 'post_type' => 'content_manager'); ....



    $loop = new WP_Query( $args );

    $title = ! empty( $instance['title'] ) ? $instance['title'] : esc_html__( 'New title', 'text_domain' );

    $sid = ! empty( $instance['id'] ) ? $instance['id'] : esc_html__( 'New ID', 'text_domain' );

    $name = ! empty( $instance['name'] ) ? $instance['name'] : esc_html__( 'Empty Content', 'text_domain' );

我使用变量来获取javascript中的值

   <script>

        function defineValue(sel)
        {
            var title = sel.options[sel.selectedIndex].text;
            var id = sel.options[sel.selectedIndex].value;
            document.getElementById("<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>").value = title;
            document.getElementById("<?php echo esc_attr( $this->get_field_name( 'id' ) ); ?>").value = id;
            document.getElementById("<?php echo esc_attr( $this->get_field_name( 'name' ) ); ?>").value = title;
        }

    </script>

当我加载小部件时,输入和其他选项显示名称和ID,但在Javascript中返回为空,除非我先保存它。

我试图测试它

 <?php echo esc_attr( $this->get_field_name( 'id' ) ); ?>

这是结果

widget-content-loader-__i__-id 

为什么会这样?

注意:

当我签入DOM时,第一个输入和其他元素具有来自该变量的id和其他属性

<input class="widefat" name="widget-content-loader[21][title]" id="widget-content-loader-21-title" value="New title" type="text">

从这个脚本开始:

    <input
        class="widefat"
        name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>"
        type="text"
        id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>"
        value="<?php echo esc_attr( $title ); ?>">

提前致谢

1 个答案:

答案 0 :(得分:1)

Javascript无法获取值,除非将其加载到DOM中, 在调用definevalue()

之前,请确保已加载元素