メールフォームの「書き直す」でメール送信されてしまう(2022年1月)

【環境情報】
・baserCMSのバージョン:4.5.4
・レンタルサーバー名:エックスサーバー
・使用テーマ:BcSample、独自
・PHPスキル(自己評価):B

フォームの「書き直す」ボタンをクリックすると、送信されてしまいます。
公式テーマ「BcSample」でも発生しており、入力欄と完了メッセージの両方が表示される状態になります。

表題の質問は以前にもあったようですが、原因が違うようです。

なお、ボタンの部分のコードは以下のとおりです。

/Elements/mail_form.php

	<?php if ($freezed): ?>
		<?php echo $this->Mailform->submit(' ' . __('書き直す') . ' ', ['div' => false, 'class' => 'form-submit', 'id' => 'BtnMessageBack']) ?>
		<?php echo $this->Mailform->submit(' ' . __('送信する') . ' ', ['div' => false, 'class' => 'form-submit', 'id' => 'BtnMessageSubmit']) ?>
	<?php else: ?>
		<input name="resetdata" value=" 取り消す " type="reset" />
		<?php echo $this->Mailform->submit(' ' . __('入力内容を確認する') . ' ', ['div' => false, 'class' => 'form-submit', 'id' => 'BtnMessageConfirm']) ?>
	<?php endif; ?>
「いいね!」 1

デベロッパーツールで何かコンソールエラーは出ていますか?

「いいね!」 1

こんちは、私も組み込んだときにも似たような事例があったのですが、
そのときは別のレイアウトなどでJSエラーが出ていて、
メールフォームに影響していたということがありましたので、似た感じかもしれません。

具体的には、メールフォームのテンプレート
theme/bc_sample/Elements/mail_form.php
をご確認いただくと、
$this->BcBaser->js(‘mail/form-submit’, true, [‘defer’])
という行が上の方(カスタマイズがなければ22行目辺り)にあると思います。

こちらのファイルが特に同名のファイルをテーマ内においてなければ
lib/Baser/Plugin/Mail/webroot/js/form-submit.js
になるかとおもうのですが、この中で
各ボタンのidを元にmodeを決定しているかと思います。
こちらがjavascriptのエラーなどで動作しておらず、全て送信になっている可能性がありそうです。

すでにご指摘もでておりますが、ブラウザのデベロッパーツールなどで
JSのエラーが出てないかを確認されると原因がわかるかもしれません。
一度確認してみてください。

それかmail_form.phpのdeferのオプションが影響しているかもしれませんので、
外してみるとかかもしれませんが、、

「いいね!」 1

ありがとうございます。

ディベロッパーツールのエラーは出ていません(/js/mail/form-submit.js は設置しています)
デバッグモードでテストしましたが、PHPのエラーも出ていませんでした。

書き直すボタンのコードは以下です。クラスを追加した以外は特に手を入れていません。
kl_vkbd_parsed=“true” というのは公式でもあったでしょうか。

<input class="c-button-submit t-submit-white" id="BtnMessageBack" type="submit" value="書き直す" kl_vkbd_parsed="true">

ありがとうございます。

deferオプションを切ってみたのですが(属性がないのを確認しました)、やはり送信されます…

mail_form.php の
<?php echo $this->Mailform->hidden('MailMessage.mode') ?>
の値、ブラウザで見ると
<input type="hidden" name="data[MailMessage][mode]" id="MailMessageMode">
の値を確認してみてください。

ここが正しく動作している場合 戻るボタン押した後に Back になって送信されます。

JS側のform-submit.js で console.logとかでMailMessageModeの値を確認してみるといいかもしれません。

いずれにしても何かが影響してjavascriptが動作していない感じがします、、、

「いいね!」 1

横から失礼します。

書き直すボタンのコードは以下です。クラスを追加した以外は特に手を入れていません。
kl_vkbd_parsed=“true” というのは公式でもあったでしょうか。

<input class="c-button-submit t-submit-white" id="BtnMessageBack" type="submit" value="書き直す" kl_vkbd_parsed="true">

こちらですと、正常に動作しないと思います。

jsがデフォルトであれば、

$(function(){
    $(".form-submit").click(function(){
        var mode = $(this).attr('id').replace('BtnMessage', '');
        $("#MailMessageMode").val(mode);
        return true;
    });
});

となっているはずなので、クラスに「form-submit」が無いと正しく動作しなくなります。

kl_vkbd_parsed=“true”
というのは公式では使っておりません。
外しておいたほうが良いと思います。

「いいね!」 2

ありがとうございます!不具合が解消しました!
ご指摘の通り「form-submit」クラスを書いておりませんでした…

こちらはbaserともテーマとも関係なく、使用しているセキュリティソフト(カスペルスキー)が書き込んでいたのを、ブラウザの開発者モードで拾ってしまっていました…重ね重ね失礼しました。