解决在flask的wtform中设置hidden属性的组件无法取得值

有这样一个需求,用表单填写文件的大小,这个大小不仅有数字而且有单位,比如:12B/KB/MB。那么考虑设计前段页面展示一个填写数字的input,同时再来一个复选单位的框。

 

利用bootstrap的样式表单,代码如下:

<div class="input-group">
   {{ form.size(class="form-control", placeholder="整数或小数") }}
   <div class="input-group-btn bs-dropdown-to-select-group">
      <button type="button" class="btn btn-default dropdown-toggle as-is bs-dropdown-to-select" data-toggle="dropdown">
          <span data-bind="bs-drp-sel-label">KB</span>
          {{ form.unit(value="KB", **{'data-bind':'bs-drp-sel-value'}) }}
          <span class="caret"/>
      </button>
      <ul class="dropdown-menu" role="menu" style="">
          <li data-value="B"><a href="#">B</a></li>
          <li data-value="KB"><a href="#">KB</a></li>
          <li data-value="MB"><a href="#">MB</a></li>
      </ul>
   </div>
</div>

需要使用js控制一下这个dropdown-menu的内容给到unit中:

$(document).ready(function(e){
    $( document ).on( 'click', '.bs-dropdown-to-select-group .dropdown-menu li', function( event ) {
    	var $target = $( event.currentTarget );
		$target.closest('.bs-dropdown-to-select-group')
			.find('[data-bind="bs-drp-sel-value"]').val($target.attr('data-value'))
			.end()
			.children('.dropdown-toggle').dropdown('toggle');
		$target.closest('.bs-dropdown-to-select-group')
    		.find('[data-bind="bs-drp-sel-label"]').text($target.context.textContent);
		return false;
	});
});

  

同时需要在form.py文件中,添加这两个组件:

size = FloatField(u'大小', filters=[lambda x: x or None])
unit = HiddenField(u'单位', filters=[lambda x: x or None])

但是当我们运行的时候发现这个form.unit.data的内容取不到,是一个u'',空的字符串。

而把HiddenField换成StringField后就有值。在StringFiled中添加widget=HiddenInput()也不好使。

 

该怎么办呢?

搜遍了网络,有的说这是flask的一个bug,有的说和csrfform有关。但是用他们的思路,统统在我这里不好使。就在我快放弃的时候,突然想到:我为啥就一定要用hidden来隐藏一个组件呢?display:none行不行?

 

试了一下,竟然行。。。好吧,问题解决了。至于之前那个为什么我也没研究出来,谁了解可以给我留言。

解决后的代码如下(只罗列了一下和上面有差别的地方)

{{ form.unit(value="KB", style="display:none;",**{'data-bind':'bs-drp-sel-value'}) }}

 

 

size = FloatField(u'大小', filters=[lambda x: x or None])
unit = StringField(u'单位', filters=[lambda x: x or None])

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值