Default.phpのキャンセルボタンで問題が発生しています。これは、いくつかの入力フィールドと保存およびキャンセルボタンのあるフォームです。私のフォームにはいくつかの必須フィールドがあります。キャンセルボタンを使用すると、フォームの検証がアクティブになり、これらのフィールドに入力するように通知されます。
Default.phpレイアウトを使用した結果でしょうか?
5022015-更新
フォームはフロントエンドフォームであり、キャンセルボタンはJoomlaカスタムJToolBarを介して行われました
6022015-レイアウトの縮小コードを追加
<?php
defined('_JEXEC') or die;
JHtml::_('behavior.formvalidation');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', 'select');
?>
<script type="text/javascript">
Joomla.submitbutton = function(task)
{
if (task == 'contact.cancel' || document.formvalidator.isValid(document.getElementById('contact-form')))
{
alert (task);
Joomla.submitform(task, document.getElementById('contact-form'));
} else {
if (task != 'contact.cancel' && document.formvalidator.isValid(document.id('contact-form'))) {
Joomla.submitform(task, document.getElementById('contact-form'));
} else {
alert('<?php echo $this->escape(JText::_('JGLOBAL_VALIDATION_FORM_FAILED')); ?>');
}
}
}
</script>
<form action="<?php echo JRoute::_('index.php?option=com_ecms&view=contact&id=' . (int) $this->form->getInput('id')); ?>" method="post" name="contactForm" id="contact-form" class="form-validate" enctype="multipart/form-data">
<div class="row-fluid">
<fieldset class="form-horizontal">
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('id'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('id'); ?>
</div>
</div>
<div class="control-group">
<div class="control-label">
<?php echo $this->form->getLabel('surname'); ?>
</div>
<div class="controls">
<?php echo $this->form->getInput('surname'); ?>
</div>
</div>
</fieldset>
<div id="toolbar-cancel" class="btn-wrapper">
<button class="btn btn-small" onclick="Joomla.submitbutton('contact.cancel')">
<span class="icon-cancel"></span><?php echo JText::_('JCANCEL') ?>
</button>
</div>
</div>
<?php echo JHtml::_('form.token'); ?>
</form>
これは、フロントエンドのツールバーを作成するためにここで使用されるJoomlasカスタムJToolBarの問題であると思われます。
最後の段落を参照してください: https://docs.joomla.org/Client-side_form_validation
問題は、この記事の回避策が機能しないことです。
その間に私は問題を見つけました。サイトのhmtl出力で生成されるボタンコードをよく見ると、ボタンのタイプが設定されていないことがわかります。この場合、「type = "button"」である必要があります。これが設定されていない場合、フォームの検証はどのような場合でもトリガーされます。
Dmitryの提案のような通常のボタン統合は成功につながります。カスタムツールバーのJoomlas JToolbarには修正が必要です。
別の解決策は、JToolBar
をまったく使用しないことです。本当に必要ですか?次のようにボタンを作成するだけです(たとえば、「キャンセル」ボタン)。
<button type="button" class="btn" onclick="Joomla.submitbutton('contact.cancel')">
<span class="icon-cancel"></span> <?php echo JText::_('JCANCEL') ?>
</button>
次にJSで:
Joomla.submitbutton = function(task)
{
if (task == 'contact.cancel')
{
Joomla.submitform(task);
}
}
そして、あなたは行ってもいいです。
これは、使用しているレイアウトの結果ではなく、フォームの検証だけをスキップするキャンセルボタンの制限です。
通常、次のようなものを実装する必要があります。
_JFactory::getDocument()->addScriptDeclaration('
Joomla.submitbutton = function(task)
{
if (task == "article.cancel" || document.formvalidator.isValid(document.getElementById("item-form")))
{
' . $this->form->getField('articletext')->save() . '
Joomla.submitform(task, document.getElementById("item-form"));
}
};
');
_
これはコアJoomla記事_edit.php
_レイアウト( https://github.com/joomla/joomla-cms/blob/bd3d9cc947458437f790180fad4b817ee36e41d3/administrator/components/com_content/views/article/tmpl/edit .php 64行目)
基本的な考え方は、送信ハンドラーをオーバーライドして、キャンセルボタンかどうかを確認することです(_task = VIEWNAME.cancel
_ ORを使用してドキュメントを検証します。これにより、キャンセルして期待どおりボタン。
あなたはおそらくこれをあなたのケースで機能させるためにいくつかのことをする必要があります:
' . $this->form->getField('articletext')->save() . '
を削除します。それはその見方に固有です。article.cancel
_を_VIEWNAME.cancel
_に更新します。document.getElementById(...)
をフォームのIDに更新します。