Usa*Usa日記 このページをアンテナに追加 RSSフィード

2006 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 05 | 06 |
2013 | 05 |

2011-04-30

[][][]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属性を送ってきやがるという問題があって(#゚Д゚)

なら大丈夫なんですが、デザイン的に<button>を使いたいときにどうするかと言えば、JavaScriptでこんなおまじないをしてやれば良いらしいですよ。

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;
    }
}

…などとリサイクルネタ(・ω・)

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/machi_pon/20110430/1313995455