html 表单提交按钮没有在按钮内发送负载
html form submit button not sending payload inside button
当我单击其中一个绿色按钮时,应该发送对表单的 post 请求,它的有效负载中应该有一个 order_status: wc-accepted
,但它丢失了,这就是我的内容点击获取:
这是代码,它会在单击按钮时发送请求,但缺少 order_status
:
<form id="dokan-order-status-form" style="display: flex; flex-direction:column;" action="" method="post">
<?php
$counter = 0;
$prefix = "status_";
foreach ( $statuses as $status => $label ) {
$counter++;
echo '<button type="submit" name="order_status" value="' . esc_attr( $status ) . '" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
}?
?>
<input type="hidden" name="order_id" value="<?php echo esc_attr( dokan_get_prop( $order, 'id' ) ); ?>">
<input type="hidden" name="action" value="dokan_change_status">
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( 'dokan_change_status' ) ); ?>">
</form>
如果我用硬编码值替换具有 echo
的行,同样的问题,order_status
不会在有效负载中发送。:
echo '<button type="submit" name="order_status" value="wc-accepted" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
我从插件中修改的原始代码工作得很好并且在有效负载中有 order_status
但选项在我不想要的下拉菜单中,我必须单击一个单独的更新按钮.我想要一个在点击时提交的按钮的下拉菜单。原代码如下:
<form id="dokan-order-status-form" action="" method="post">
<select id="order_status" name="order_status" class="form-control">
<?php
foreach ( $statuses as $status => $label ) {
echo '<option value="' . esc_attr( $status ) . '" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</option>';
}
?>
</select>
<input type="hidden" name="order_id" value="<?php echo esc_attr( dokan_get_prop( $order, 'id' ) ); ?>">
<input type="hidden" name="action" value="dokan_change_status">
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( 'dokan_change_status' ) ); ?>">
<input type="submit" class="dokan-btn dokan-btn-success dokan-btn-sm" name="dokan_change_status" value="<?php esc_attr_e( 'Update', 'dokan-lite' ); ?>">
<a href="#" class="dokan-btn dokan-btn-default dokan-btn-sm dokan-cancel-status"><?php esc_html_e( 'Cancel', 'dokan-lite' ) ?></a>
</form>
是否可以仅通过更改 html + php 将 order_status
添加到负载中,还是我需要使用 jquery?
所以我不得不使用jquery。基本上在上面的表格中,我在关闭表格之前添加了这个元素:
<input type="hidden" id="order_status"name="order_status" value="test">
并且在 echo 的行中,我用这个替换了它,我添加了一个名为“status-click”的 class + 不相关的 CSS.
echo '<button type="button" id="' . esc_attr( $label) . '" value="' . esc_attr( $status ) . '" style="margin: 5px 0; height: 4rem;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="status-click dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
因此,对于 jquery,我添加了一个函数,以便单击带有“status-click”的 class 的任何按钮时,它会获取该按钮的值,并输入我在开始时添加的隐藏元素的值。此元素将发送保留“order_status”参数的有效负载。然后我用 post 请求提交表单,然后它隐藏状态按钮,显示新状态,然后再次显示所有状态按钮。
这是我的 jquery 函数。有一点html在我原来的post中没有显示出来,但是表格被包含在一个
元素中,并且有一个“dokan-hide”class隐藏了应用时的列表元素:
$('.status-click').on('click', function(e) {
var form = $(this).closest('form');
var self = $(this).closest('li');
var li = self.closest('li');
var select = $(this);
$('#order_status').prop('value', select.attr("value"));
li.block({ message: null, overlayCSS: { background: '#fff url(' + dokan.ajax_loader + ') no-repeat center', opacity: 0.6 } });
$.post( dokan.ajaxurl, form.serialize(), function(response) {
li.unblock();
if ( response.success ) {
var prev_li = li.prev();
li.addClass('dokan-hide');
prev_li.find('label').replaceWith(response.data);
li.removeClass('dokan-hide');
} else {
dokan_sweetalert( response.data, {
icon: 'success',
} );
}
});
});
按钮数组名称的定义必须是order_status[].
echo '<button type="submit" name="order_status[]" value="' . esc_attr( $status ) . '" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
服务器以这种方式将其解释并作为数组处理。
对于服务器端处理,这段遍历按钮数组的代码将找到值为 :
的按钮
$arr_buttons = $_POST['order_status'];
foreach($arr_buttons as $key =>$item){
if (isset($item)){
echo $item;
}
}
当我单击其中一个绿色按钮时,应该发送对表单的 post 请求,它的有效负载中应该有一个 order_status: wc-accepted
,但它丢失了,这就是我的内容点击获取:
这是代码,它会在单击按钮时发送请求,但缺少 order_status
:
<form id="dokan-order-status-form" style="display: flex; flex-direction:column;" action="" method="post">
<?php
$counter = 0;
$prefix = "status_";
foreach ( $statuses as $status => $label ) {
$counter++;
echo '<button type="submit" name="order_status" value="' . esc_attr( $status ) . '" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
}?
?>
<input type="hidden" name="order_id" value="<?php echo esc_attr( dokan_get_prop( $order, 'id' ) ); ?>">
<input type="hidden" name="action" value="dokan_change_status">
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( 'dokan_change_status' ) ); ?>">
</form>
如果我用硬编码值替换具有 echo
的行,同样的问题,order_status
不会在有效负载中发送。:
echo '<button type="submit" name="order_status" value="wc-accepted" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
我从插件中修改的原始代码工作得很好并且在有效负载中有 order_status
但选项在我不想要的下拉菜单中,我必须单击一个单独的更新按钮.我想要一个在点击时提交的按钮的下拉菜单。原代码如下:
<form id="dokan-order-status-form" action="" method="post">
<select id="order_status" name="order_status" class="form-control">
<?php
foreach ( $statuses as $status => $label ) {
echo '<option value="' . esc_attr( $status ) . '" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</option>';
}
?>
</select>
<input type="hidden" name="order_id" value="<?php echo esc_attr( dokan_get_prop( $order, 'id' ) ); ?>">
<input type="hidden" name="action" value="dokan_change_status">
<input type="hidden" name="_wpnonce" value="<?php echo esc_attr( wp_create_nonce( 'dokan_change_status' ) ); ?>">
<input type="submit" class="dokan-btn dokan-btn-success dokan-btn-sm" name="dokan_change_status" value="<?php esc_attr_e( 'Update', 'dokan-lite' ); ?>">
<a href="#" class="dokan-btn dokan-btn-default dokan-btn-sm dokan-cancel-status"><?php esc_html_e( 'Cancel', 'dokan-lite' ) ?></a>
</form>
是否可以仅通过更改 html + php 将 order_status
添加到负载中,还是我需要使用 jquery?
所以我不得不使用jquery。基本上在上面的表格中,我在关闭表格之前添加了这个元素:
<input type="hidden" id="order_status"name="order_status" value="test">
并且在 echo 的行中,我用这个替换了它,我添加了一个名为“status-click”的 class + 不相关的 CSS.
echo '<button type="button" id="' . esc_attr( $label) . '" value="' . esc_attr( $status ) . '" style="margin: 5px 0; height: 4rem;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="status-click dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
因此,对于 jquery,我添加了一个函数,以便单击带有“status-click”的 class 的任何按钮时,它会获取该按钮的值,并输入我在开始时添加的隐藏元素的值。此元素将发送保留“order_status”参数的有效负载。然后我用 post 请求提交表单,然后它隐藏状态按钮,显示新状态,然后再次显示所有状态按钮。
这是我的 jquery 函数。有一点html在我原来的post中没有显示出来,但是表格被包含在一个
$('.status-click').on('click', function(e) {
var form = $(this).closest('form');
var self = $(this).closest('li');
var li = self.closest('li');
var select = $(this);
$('#order_status').prop('value', select.attr("value"));
li.block({ message: null, overlayCSS: { background: '#fff url(' + dokan.ajax_loader + ') no-repeat center', opacity: 0.6 } });
$.post( dokan.ajaxurl, form.serialize(), function(response) {
li.unblock();
if ( response.success ) {
var prev_li = li.prev();
li.addClass('dokan-hide');
prev_li.find('label').replaceWith(response.data);
li.removeClass('dokan-hide');
} else {
dokan_sweetalert( response.data, {
icon: 'success',
} );
}
});
});
按钮数组名称的定义必须是order_status[].
echo '<button type="submit" name="order_status[]" value="' . esc_attr( $status ) . '" style="margin: 5px 0;" onfocus="this.classList.toggle(\'dokan-btn-default\');" class="dokan-btn dokan-btn-success" ' . selected( $status, 'wc-' . dokan_get_prop( $order, 'status' ), false ) . '>' . esc_html__( $label, 'dokan-lite' ) . '</button>';
服务器以这种方式将其解释并作为数组处理。
对于服务器端处理,这段遍历按钮数组的代码将找到值为 :
的按钮$arr_buttons = $_POST['order_status'];
foreach($arr_buttons as $key =>$item){
if (isset($item)){
echo $item;
}
}