我有一个动态表单,可以使用iPad显示.
这个表单有几个单选按钮和一些文本字段和一个提交按钮.
在iPad中,虚拟键盘GO按钮应该与输入键一起使用,导致单击表单中的第一个提交按钮并发布表单.
为了避免在表单完成之前过多的非自愿发布,我们在表单的上方添加了一个额外的提交按钮,绝对位于可见区域之外,并且onclick ="return false;".这会劫持输入击键,防止在除Safari Mobile之外的每个浏览器中意外发布.
在iPad上,我们甚至测试了Opera mobile,它按预期工作.
但Safari Mobile显然忽略了返回false,因为单击按钮的事件会导致其他浏览器无法发布的帖子,甚至不会在PC上进行Safari.
我的问题是
1:为什么safari mobile会在提交时忽略"return false",这里还有其他机制吗?
2:如何在单击GO时阻止Safari移动设备发布表单?
我已经在谷歌和#2进行了大量的搜索,发现了很多例子,但都需要大量的JavaScript和事件绑定和形式与用户一起的动态特性产生的,因为几乎所有的需要结合事件的每一个内容,使这个容易出错,而且相当复杂文本框和文本区域.
任何有效的解决方案都是好的,但越简单越好,特别是如果它不需要对可能与自动完成或验证事件冲突的表单或事件进行太多自定义.
示例testpage:http://lab.dnet.nu/ipad.php
此错误看起来像是由于在服务器上安装框架4.5引起的,即使该项目仍然针对4.0.
4.5替换了CLR,看起来它在将tinyint类型的对象拆箱到int时发生了变化.这在4.0中工作,但在安装4.5后没有.
============================================
请在回答之前阅读整个问题,目前大多数答案都没有回答我提出的问题.
我们今天在从sql中的tinyint到int使用的转换中出现错误
Daterow datarow = GetOneDatarow(connection,
"SELECT tinyintcolumn FROM table1 WHERE id = 4");
int i = (int)datarow["tinyintcolumn"];
Run Code Online (Sandbox Code Playgroud)
这是旧代码已经在产品中存在了几年而没有任何变化,它一直在工作到昨天.(而且它不是确切的代码,只是足以显示上下文)
===更新
确切的错误消息是:"指定的强制转换无效!" 和最后一行
int i = (int)datarow["tinyintcolumn"];
Run Code Online (Sandbox Code Playgroud)
是我们的代码中输出错误的确切行,只更改了变量名和列名.
数据库列为tinyint,默认值为0,没有索引或其他约束.
===结束更新
===更新2
Henk Holterman在他的回复中告诉我,即使是专门为4.0编译的项目,FW 4.5也取代了4.0的CLR,这可以远程改变现有的4.0行为.
我会保持开放一段时间,但到目前为止他的回答是最有希望的:D ===结束
几个星期前我们从框架3.5改为4.0但是昨天下午重新编译之后才发生这种情况,昨天早上相同的代码(甚至在重新编译之后)就像发条一样工作.
有没有人知道为什么这个以前工作,现在不工作?
微软是否已经做了任何改变,删除了一个隐含的转换,或者之前它是否通过纯魔术工作?
我们通过将数据库列更改为int来解决它,但我仍然对可能导致它立即失败的原因感到好奇.
===更新3
只是为了完成这个.
我发现框架之间的变化.在更新中,Microsoft更改了装箱和拆箱的方式.这导致从字节到int的隐式转换,当字节被装箱时,旧的FW会失败,因为它在数据表中.
未装箱的字节将在4.5中隐式地转换为int,但是装箱的字节是不能隐式转换的通用对象.
不是,这在3.5 SP1中已更改,因此我们的FW 4.0也应该失败,除非SP1的更新不在4.0更新中.这还有待回答:)
我使用正常的空白分隔到隐藏的通道,但我有一个规则,我想包括任何空格以便以后处理,但我发现的任何例子都需要一些非常奇怪的手动编码.
没有简单的选项可以从多个渠道中读取,例如从一开始就将空白放在那里的选项.
防爆.这是WhiteSpace词法分析器规则
WS : ( ' '
| '\t'
| '\r'
| '\n'
) {$channel=HIDDEN;}
;
Run Code Online (Sandbox Code Playgroud)
这是我的规则,我想包括空格
raw : '{'? (~('{'))*;
Run Code Online (Sandbox Code Playgroud)
基本上它捕获所有规则来捕获与其他模式不匹配的其他规则的内容,因此我需要原始流.
我希望有一个{$channel==DEFAULT || $channel==HIDDEN}语法示例,但找不到任何.
我的目标是C#,但如果需要,我可以重写Java示例.
更新:我正在使用 Sql Server 2008 R2。
我将更新大量行,为了避免不必要的锁定,我将在每次更新大约一千行的匹配中执行此操作。
使用 SETROWCOUND我可以将更新限制为 1000 行,使用WHERE ID > x我可以设置它应该运行哪个批次。
但为了使其工作,我需要知道刚刚处理的批次中的最高 ID。
我可以让用户OUTPUT返回所有受影响的 ID 并找到代码中最高的 ID,但我希望能够仅返回最高的 ID。
我试过这个
SELECT MAX(id)
FROM (
UPDATE mytable
SET maxvalue = (SELECT MAX(salesvalue) FROM sales WHERE cid = t.id GROUP BY cid)
OUTPUT inserted.id
FROM mytable t
WHERE au.userid > 0
) updates(id)
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误
A nested INSERT, UPDATE, DELETE, or MERGE statement is not allowed in a SELECT statement that is not the immediate …
我试图将VS2010调试器连接到Linqpad,这样当我使用来自我的c#项目的类时,我可以添加断点并使Linqpad执行暂停.
但这不起作用,Linqpad愉快地执行并完成而没有击中我的断点.
现在,我在Linqpad上读了一下,并在它自己的进程中执行每个"查询",这是否以任何方式愚弄VS2010,以便我附加的进程不是执行我的对象的进程?
如果是这种情况,有没有办法解决这个问题,以便我可以使用Linqpad进行调试?
如果我有一个对象,其中包括IEnumerable,我转储此对象,我得到枚举值.
有没有办法让Linqpad列出其他属性:
以下示例:我可以获得Dump以包含Hello和数字属性吗?
void Main()
{
var t = new test();
var d = new Dictionary<string,string> {{"Hello","World"},{"Good by","Sky"}};
t.Dump();
d.Dump();
}
// Define other methods and classes here
public class test : IEnumerable
{
public string Hello { get { return "World"; }}
public List<int> digits { get { return new List<int> {0,1,2,3,4,5,6,7,8,9}; }}
public IEnumerator GetEnumerator() { yield return "Hej"; }
}
Run Code Online (Sandbox Code Playgroud) 通常,您不能在 C# 中使用 ObjectId 作为可选参数,因为 ObjectId 是一个没有“设计时常量”默认值的结构。
ObjectId.Empty 是一个执行代码的属性,出于同样的原因,不允许使用 default(ObjectId)。
有谁有关于如何创建工作设计时间常数以便以下语句起作用的解决方案?(这不是真正的方法,只是一个例子)
MyObject LoadOrCreate(ObjectId id = somedefaultvalue)
{}
Run Code Online (Sandbox Code Playgroud)
如果我用上面的例子尝试这个,它不会编译?
我当然可以使用该方法的单独重载,但我宁愿使用选项而不是重载。
正如我在对第一个答案的评论中指出的,可为空是一个选项,但我宁愿不使用它,因为必须转换回不可为空。
所以我仍在寻找一些“更好”的解决方案;)