将$this->Get_field_name()传递给Java脚本

时间:2013-08-28 作者:Kurt

我尝试过两种方法中的一种:在form 我的方法Widget 类(扩展WP_Widget), 我有以下代码段,它设置了一个全局javascript变量:

if( $instance ) :
?>
    <script type="text/javascript">
        window.widget_order_name = "<?php echo $this->get_field_name( \'order\' ) ?>";
    </script>
<?php
endif;
在小部件管理标记中,我还尝试创建以下html结构:

<div
  field_name=\'<?php echo $this->get_field_name( \'order\' ) ?>\'
  id=\'order_field_name\'
  class=\'hidden\'>
</div>
在我的小部件管理javascript文件中,我通过两种方式之一(如下所示)获取此字段\\u名称的值,然后将该小部件名称附加到隐藏输入字段(其中包含我要存储的值)的值上。

第一种方法,使用window.widget_order_name:

var widget_field_name = window.widget_order_name;
第二种方法,使用jQuery 抓住field_name:

var widget_field_name = $( \'#order_field_name\' ).attr( \'field_name\' );
我的问题:

每当我第一次将小部件从可用的小部件容器移动到侧栏时,我没有得到实际的字段名,而是得到一种字段名的占位符。

因此,与其得到这样的东西:

<input 
  type="hidden" 
  name="widget-hours-widget[2][order][]"
  value="L48">
我明白了:

<input 
  type="hidden" 
  name="widget-hours-widget[__i__][order][]" 
  value="L26">
单击“保存”按钮后field_name 给我小部件的正确名称,widget-hours-widget[2] 而不是占位符widget-hours-widget[__i__].

有没有人遇到过类似的问题或知道如何着手解决?

谢谢

1 个回复
SO网友:Kurt

问题出在我身上,所以我找到了问题所在。在下面的语句中,jQuery正在获取id为的第一个元素#order_field_name.

var widget_field_name = $( \'#order_field_name\' ).attr( \'field_name\' );
事实证明,实际上有两个id为的元素。第一个id为可用小部件部分中的小部件。这是单击的部分(&;将小部件拖动到侧栏。这是jQuery选择器返回给我的元素。

The widget name and description.

以及标记:

enter image description here

解决方案是,我有一个点击监听器,可以动态添加带有字段名的隐藏输入框。所以,我使用jQuery的树遍历方法返回到widget的form 元素,并使用#order_field_name id.从那里,我抓住了field_name 属性,该属性具有正确的field_name.

$( \'a.add-schedulable\' ).click( function( evt ) {

  // ... code omitted ...

  var widget_field_name = $( this ).parents( \'form\' ).find( \'#order_field_name\' ).attr( \'field_name\' );

   // ... code omitted ...
}); 
从那以后,我使用了一些javascript&;jQuery创建具有所需属性的隐藏输入元素,该属性类似于以下内容:

<input 
  type="hidden" 
  name="widget-hours-widget[3][order][]" 
  value="L13"> 

结束