formに複数buttonを配置するときの話、IE6への対処編
こんな風に、formに複数のbuttonを配置したい時があり(・ω・)
<button type="submit" name="update">更新</button> <button type="submit" name="back">戻る</button>
この場合、どちらの処理を行うか切り分けるときには、name属性の値を使いますが。
例えば、Spring MVCであればRequestMappingのparamsに値を設定して。
@RequestMapping(method = RequestMethod.POST, params = "back") public String back(...) { ... }
ASP.NET MVCであれば、ActionMethodSelectorAttribute派生を作って対処しますが。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] public class ExistParamaterAttribute : ActionMethodSelectorAttribute { public string Name { get; set; } public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo) { return controllerContext.RequestContext.HttpContext.Request.Form.GetValues( Name ) != null; } }
しかし、IE6では両方のname属性を送ってきやがるという問題があって(#゚Д゚)
なら大丈夫なんですが、デザイン的に
var buttons = document.getElementsByTagName('button'); for(i = 0; i < buttons.length; i++) { if (buttons[i].onclick) continue; buttons[i].onclick = function () { for(j = 0; j < this.form.elements.length; j++) if (this.form.elements[j].tagName == 'BUTTON') { this.form.elements[j].disabled = true; } this.disabled=false; this.value = this.attributes.getNamedItem("value").nodeValue; } }
…などとリサイクルネタ(・ω・)