Safari/Webkitのおせっかいキャッシュとその対策。 へのコメント http://yabooo.org/archives/180 いずれにせよITで世界征服をたくらむ悪の組織です。 Fri, 08 May 2009 22:44:14 +0900 http://wordpress.org/?v=2.8.3 hourly 1 hiroki_daichi より http://yabooo.org/archives/180/comment-page-1#comment-68 hiroki_daichi Sun, 22 Feb 2009 15:18:06 +0000 http://www.yabooo.org/?p=180#comment-68 ありがとうございます。エレガントですばらしい方法ですね。 今冷静になって考えれば、当たり前のことなんですがこのバグに直面した当初ためしたさまざまな方法でdefaultValueも受け付けなかったような気がしていて、(おそらくinsert時ではなく、DOMContentLoadedのタイミングで) もーnameを破壊するしかねぇ!と思い込んでいました。 removeChildで消えないなんて、もう常識的な方法では通用しない気がしていたので>< ありがとうございます。エレガントですばらしい方法ですね。

今冷静になって考えれば、当たり前のことなんですがこのバグに直面した当初ためしたさまざまな方法でdefaultValueも受け付けなかったような気がしていて、(おそらくinsert時ではなく、DOMContentLoadedのタイミングで)

もーnameを破壊するしかねぇ!と思い込んでいました。
removeChildで消えないなんて、もう常識的な方法では通用しない気がしていたので><

]]>
nanto_vi より http://yabooo.org/archives/180/comment-page-1#comment-64 nanto_vi Wed, 10 Dec 2008 18:24:37 +0000 http://www.yabooo.org/?p=180#comment-64 やりたいこととしては、動的に追加されたテキストボックスの値を常にデフォルトの値にする、ということでよろしいでしょうか。だとすれば、たとえば以下のようにするのはいかがでしょうか。 if (isWebKit) { document.addEventListener("DOMContentLoaded", function () { function resetValue(input) { if (input.type != "text") return; input.value = input.defaultValue; } document.body.addEventListener("DOMNodeInserted", function (event) { var target = event.target; if (target instanceof HTMLInputElement) resetValue(target); else if (target.nodeType == Node.ELEMENT_NODE) Array.prototype.forEach.call(target.getElementsByTagName("input"), resetValue); }, false); }, false); } やりたいこととしては、動的に追加されたテキストボックスの値を常にデフォルトの値にする、ということでよろしいでしょうか。だとすれば、たとえば以下のようにするのはいかがでしょうか。

if (isWebKit) {
document.addEventListener(”DOMContentLoaded”, function () {
function resetValue(input) {
if (input.type != “text”) return;
input.value = input.defaultValue;
}
document.body.addEventListener(”DOMNodeInserted”, function (event) {
var target = event.target;
if (target instanceof HTMLInputElement)
resetValue(target);
else if (target.nodeType == Node.ELEMENT_NODE)
Array.prototype.forEach.call(target.getElementsByTagName(”input”),
resetValue);
}, false);
}, false);
}

]]>