背景:
页面有多个表单,我需要在提交每个表单的时候,将其对应的id属性存入cookie中。使用1.9.1版本的jQuery,现在我需要监听页面表单的提交事件。
此时能不能这样:
直接监听事件,回调函数为设置cookie的操作。这样是否安全呢?跳转是否先于事件完成呢?中间的过程不是很清晰,希望得到大家的帮助。
或者是必须要取消浏览器的默认跳转,在回调函数的内部末尾通过location.href进行跳转呢?
对于这些有些纠结,很希望得到大家的帮助
ringa_lee
可以直接写 cookie,你想:阻止默认事件行为也是要写在回调函数里的,如果无法保证先于默认行为执行,怎么能保证阻止成功呢?
但是回调函数里的异步处理操作是无法保证的,写 cookie 则不在此例。
顺便一提,如果用户禁用了 cookie 怎么办?(虽然很罕见)我觉得更好的办法是在提交时往 URL 上拼接一个 query params(比如你的 ID),通过监听 location 的变化来处理这件事情。这也是现代 JavaScript 应用程序客户端路由常用的方式。
又或者表单的提交改为 Ajax 请求,直接禁用默认的提交事件,此时页面是不会刷新的,你可以保证在提交成功之后记录表单 ID,这样会更健壮一些。
可以直接写 cookie,你想:阻止默认事件行为也是要写在回调函数里的,如果无法保证先于默认行为执行,怎么能保证阻止成功呢?
但是回调函数里的异步处理操作是无法保证的,写 cookie 则不在此例。
顺便一提,如果用户禁用了 cookie 怎么办?(虽然很罕见)我觉得更好的办法是在提交时往 URL 上拼接一个 query params(比如你的 ID),通过监听 location 的变化来处理这件事情。这也是现代 JavaScript 应用程序客户端路由常用的方式。
又或者表单的提交改为 Ajax 请求,直接禁用默认的提交事件,此时页面是不会刷新的,你可以保证在提交成功之后记录表单 ID,这样会更健壮一些。