我尝试过两种方法中的一种:在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__]
.
有没有人遇到过类似的问题或知道如何着手解决?
谢谢
SO网友:Kurt
问题出在我身上,所以我找到了问题所在。在下面的语句中,jQuery正在获取id为的第一个元素#order_field_name
.
var widget_field_name = $( \'#order_field_name\' ).attr( \'field_name\' );
事实证明,实际上有两个id为的元素。第一个id为可用小部件部分中的小部件。这是单击的部分(&;将小部件拖动到侧栏。这是jQuery选择器返回给我的元素。
以及标记:
解决方案是,我有一个点击监听器,可以动态添加带有字段名的隐藏输入框。所以,我使用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">