我正试图在一个新的移动网站上实现"占位符"属性。遇到一个问题,如果用户将字段留空(显示占位符),则占位符将作为字段值提交给PHP,以便接收并放置在数据库中。相反,它应该(我认为)发送一个空值。这会导致服务器端验证出现问题——接收的PHP脚本认为提交了一个合法的值,而不是一个空值,这会向用户返回错误。
我希望能迅速解决这个问题。
下面的示例代码:
<form action="somepage.php" method="post">
<input type="text" name="yourName" placeholder="Enter your name here">
<input type="submit">
</form>
PHP看到:
$_POST['yourName'] = 'Enter your name here';
而不是:
$_POST['yourName'] = '';
后者正是我希望它看到的。
如有任何帮助,我们将不胜感激!!!
*编辑**
下面是一个有问题的表单示例:
https://www.badgleymischka.com/mobileTest.php
保持所有字段不变(请注意,在源代码中,这些字段是由占位符而非值填充的)。单击"继续"按钮,您将看到带有占位符值的_POST变量。
在页面加载的几个输入上,有东西正在删除placeholder
属性文本。。。
根据您的源代码,您将调用两个不同的jQuery脚本。删除在关闭的<body />
标签附近找到的。此可能与Foundation附带的占位符插件冲突。
<script src="js/vendor/jquery.js"></script>
但这可能是罪魁祸首:不确定你想在这里写什么。但这似乎就是问题所在。参见jquery.main.js
中的line 17
。将此全部删除。我认为这是不必要的,而且是矛盾的。
// clear inputs on focus
function initInputs() {
PlaceholderInput.replaceByOptions({
// filter options
clearInputs: true,
clearTextareas: true,
clearPasswords: true,
skipClass: 'default',
// input options
wrapWithElement: false,
showUntilTyping: false,
getParentByClass: false,
placeholderAttr: 'value' // <-- ding, ding! Prob the conflictor, if not this entire function
});
}
我无法重现您的错误。我使用Firefox 25和26、Chrome 31、IE 11、Opera 12.16和Safari 5.1.7进行了测试。从规范来看,我不认为占位符是要提交的,所以您确实遇到了某种错误。
我能想到的这种行为的唯一原因是,您在HTML中包含了一个(java)脚本,针对的是不支持HTML5(和placeholder
属性)的浏览器。这样的脚本可能会用占位符填充空输入,但无法在提交表单之前删除它们。
如果确实是这种情况,并且您的问题是由这样的脚本引起的,则可以通过修复脚本或完全删除脚本来解决这些问题。如果选择修复脚本,则需要确保值等于占位符的输入重置为默认值。
我在自己的搜索中偶然发现了这个问题,所以如果其他人正在寻找答案,请尝试这个:
<input type="text" name="yourName" placeholder="Enter your name here" required>
通过在输入标记中添加"required",用户必须在提交之前填写此字段。
这应该像魅力一样工作,但我认为由于它在移动设备上,有些不同。
一个解决方案(我相信还有更好的解决方案)是用if进行检查。因此,如果值与占位符相同,则将其留空,然后继续验证。
同时尝试放置val="。