表单的HTML标准似乎是禁用的输入元素不会对表单名称/值集合做出贡献。
有没有办法解决这个问题?我需要能够打开和关闭禁用功能,但仍然可以返回表单提交时的值。
我意识到我可以在提交表单之前使用JavaScript将值复制到隐藏的输入,但我不愿意。有更清洁的方式吗?
我正在使用ASP.NET,而不是那么重要。
答案 0 :(得分:81)
您应该使用readOnly
标志而不是disabled
。用户无法编辑只读字段,但仍然使用表单提交。
<input type="text" value="blah" readonly="true"/>
答案 1 :(得分:19)
表单的HTML标准似乎是禁用的输入元素不会对表单名称/值集合做出贡献。
这是正确的。
HACK:您可以在提交后使用Javascript:
答案 2 :(得分:9)
如果您将值只读,而不是禁用它,则该字段的名称/值将与其余的非禁用字段一起发送。
使readonly fields的焦点事件处理程序将焦点传递给下一个符合条件的字段,使其更像是一个禁用元素。有些浏览器可以让你集中精力并选择只读字段,有些浏览器甚至可以让你粘贴到只读字段,尽管它们会恢复到原始值onblur和onchange。
<input type="text" value="" readonly="readonly">
答案 3 :(得分:8)
作为Wayne骇客的一个稍微强大的变体(可能会被后退按钮推动混淆),当禁用控件时:设置readonly= true
和className= 'disabled'
而不是disabled= true
,然后样式.disabled
看起来类似于禁用的字段。
答案 4 :(得分:2)
我发了一个快速(仅限Jquery)插件,在输入被禁用时将值保存在数据字段中。 这只是意味着只要通过jquery使用.prop()或.attr()以编程方式禁用该字段...然后通过.val(),. serialIize()或.serializeArra()访问该值将始终返回即使被禁用也是如此:)
答案 5 :(得分:0)
简单只需两步
检查您要访问的输入是否已禁用,如果它已删除其“已禁用”属性
获取值,然后再次添加disabled属性。
答案 6 :(得分:0)
我认为这是一个黑客,但似乎对我有用。两个都做!用户看到禁用的输入,显然是幻影,浏览器阻止了交互 - 但它没有提交表单。用户没有看到可能迷失方向的只读字段,但是它随表单一起提交。
<input name="mode_d" size="8" value="mode" disabled>
<input name="mode" value="mode" hidden readonly>
答案 7 :(得分:0)
您可以轻松地
将输入状态重置为禁用
import xml.etree.ElementTree as ET
xml_str = '''<?xml version="1.0" encoding="UTF-8"?>
<drugbank xmlns="http://www.drugbank.ca" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.drugbank.ca http://www.drugbank.ca/docs/drugbank.xsd" version="5.1" exported-on="2019-07-02">
<drug type="biotech" created="2005-06-13" updated="2019-06-04">
<products>
<product>
<name>Refludan</name>
<labeller>Bayer</labeller>
<ndc-id/>
<ndc-product-code/>
<dpd-id>02240996</dpd-id>
<ema-product-code/>
<ema-ma-number/>
<started-marketing-on>2000-01-31</started-marketing-on>
<ended-marketing-on>2013-07-26</ended-marketing-on>
<dosage-form>Powder, for solution</dosage-form>
<strength>50 mg</strength>
<route>Intravenous</route>
<fda-application-number/>
<generic>false</generic>
<over-the-counter>false</over-the-counter>
<approved>true</approved>
<country>Canada</country>
<source>DPD</source>
</product>
</products>
</drug>
</drugbank>
'''
root = ET.fromstring(xml_str)
# print(root.findall('{http://www.drugbank.ca}drug'))
ns = {'drug_bank': 'http://www.drugbank.ca'}
for drug in root.findall('drug_bank:drug', ns):
for products in drug.findall('drug_bank:products', ns):
for product in products.findall('drug_bank:product', ns):
for nametag in product.findall('drug_bank:name', ns):
print(nametag.text)
答案 8 :(得分:-1)
您可以使用Visible=false
和/或ReadOnly=true
代替Enabled=false
吗?
如果您使用的是控件,则不应该设置Enabled=false
?
答案 9 :(得分:-1)
而不是将字段设置为禁用将readonly属性设置为“readonly”,如下所示。
readonly=readonly
这将在表单提交中发送您的字段值。