javascript - Yii2 - 单击按钮时显示和隐藏 div 有问题
问题描述
我试图在按钮单击时隐藏和显示 div。默认情况下,我隐藏 div。当我单击按钮时,它最初可以工作。但我观察到几秒钟后,div 会自行隐藏或显示而无需单击按钮。
按钮
<div class="col-xs-12 col-sm-12 left-padding">
<?= Html::a('<i class="fa fa-search-plus"></i>'.Yii::t('app', ' Display Advanced Search'), [''], ['class' => 'btn btn-block btn-warning', 'onclick' => "advancedSearch()"]) ?>
</div>
Div 隐藏或显示
<div id="toggleSearch" class="col-xs-12" style="display:none">
<div class="box">
<div class="box-body table-responsive">
<div class="col-xs-12">
<h4><strong><u>Advanced Search</u></strong></h4>
</div>
<?php $form = ActiveForm::begin([
'enableAjaxValidation' => false,
'method' => 'get']); ?>
<div class="col-xs-12 col-lg-12 no-padding">
<div class="col-xs-12 col-sm-6 col-lg-6">
<?= $form->field($searchModel, 'zonal_office_id')->widget(Select2::classname(), [
'data' => ArrayHelper::map(app\models\ZonalOffice::find()->all(),'id','zonal_office_name'),
'language' => 'en',
'options' => ['placeholder' => 'Select Zonal Office ...'],
// 'disabled'=>'true',
'pluginOptions' => [
'allowClear' => true
],
]); ?>
</div>
<div class="col-xs-12 col-sm-6 col-lg-6">
<?= $form->field($searchModel, 'state_name')->textInput(['maxlength' => 100, 'placeholder' => $searchModel->getAttributeLabel('state_name')]) ?>
</div>
</div>
<div class="col-xs-12 col-lg-12">
<div class="form-group">
<?= Html::submitButton('Click to Search', ['class' => 'btn btn-success']) ?>
</div>
</div>
<?php ActiveForm::end(); ?>
</div>
</div>
</div>
Javascript
<script>
function advancedSearch() {
var x = document.getElementById("toggleSearch");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
}
</script>
我该怎么做才能解决问题。谢谢
解决方案
原因
这是因为您将 url 参数分配为['']
带有空字符串的数组,而不是带有javascript:void(0)
or的字符串'#.'
。
- 当您提供它
['']
时,它将创建与您所在页面相同的 URL,这意味着如果您的视图加载到 URL 上http://example.com/dashboard/search
,它将将相同的 URL 附加到锚点。类似地,提供空字符串而不是数组会将路由附加dashboard/search
到href
锚点。在您的情况下,它正在重新加载页面,这就是为什么您感觉它隐藏起来的原因,它实际上重新加载了页面并返回到初始状态。
为什么它会创建这些 URL?
调用进一步BaseHtml::a()
调用Url::to($url);
static::toRoute($url, $scheme);
如果 url 是一个数组['controller/action']
或空的['']
。Yii::$app->getRequest()->getUrl();
如果提供的 url 是空字符串''
。- 或者如果不为空,则按原样添加字符串,例如
javascript:void(0)
或'#.'
因此,将您的代码更改为
解决方案 1
<?= Html::a('<i class="fa fa-search-plus"></i>' . Yii::t('app', ' Display Advanced Search'), '#.', ['class' => 'btn btn-block btn-warning', 'onclick' => "advancedSearch()"]) ?>
解决方案 2
或使用 jquery 绑定 javascript,但首先使用 name 向锚添加一个类,然后从锚advance_search
中删除onclick
属性。
<?= Html::a('<i class="fa fa-search-plus"></i>' . Yii::t('app', ' Display Advanced Search'), '#.', ['class' => 'advance_search btn btn-block btn-warning']) ?>
并在您的视图文件顶部添加以下内容
$js=<<< JS
$("a.advance_search").on('click',function(e){
e.preventDefault();
var x = document.getElementById("toggleSearch");
if (x.style.display === "none") {
x.style.display = "block";
} else {
x.style.display = "none";
}
});
JS;
$this->registerJs($js,\yii\web\view::POS_READY);
推荐阅读
- symfony - 教义通告参考
- javascript - 我们如何从快速会话中读取动态变化的值并在角度前端显示该值
- javascript - Chart.js PHP 数据库数据不显示
- ruby-on-rails - 更新用复选框选中的表中的多条记录 - Rails
- regex - 如何在 perl 中提取和打印这两个命名的捕获组?
- sql-server - 我可以通过更改适用于 SSIS 项目的环境来在不同服务器上的 BIDS 中预览报告吗?
- javascript - 使用 dom 上下文在 Java JVM 中执行 JS
- java - 寻找 Java 格式的时间工具
- c# - Ignite C# 瘦客户端中的字段 ID 冲突错误
- python - 是否可以在本地没有所有依赖项的情况下运行/序列化 Dataflow 作业?