2

jsとcssでスタイル設定されたボタンがあり、ボタンをクリックするたびに更新パネル内にボタンがあります(ポストバックを実行します)。スタイルが失われますか?

ここでは簡単な問題だと思いますが、何か考えはありますか?

<html xmlns="http://www.w3.org/1999/xhtml">

    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Button ID="Button1" runat="server" class="art-button" Text="Button" />
    </ContentTemplate>
</asp:UpdatePanel>
</form>

function artButtonsSetupJsHover(className) {
var tags = ["input", "a", "button"];
for (var j = 0; j < tags.length; j++){
    var buttons = xGetElementsByClassName(className, document, tags[j]);
    for (var i = 0; i < buttons.length; i++) {
        var button = buttons[i];
        if (!button.tagName || !button.parentNode) return;
        if (!artHasClass(button.parentNode, 'art-button-wrapper')) {
            if (!artHasClass(button, 'art-button')) button.className += ' art-button';
            var wrapper = document.createElement('span');
            wrapper.className = "art-button-wrapper";
            if (artHasClass(button, 'active')) wrapper.className += ' active';
            var spanL = document.createElement('span');
            spanL.className = "l";
            spanL.innerHTML = " ";
            wrapper.appendChild(spanL);
            var spanR = document.createElement('span');
            spanR.className = "r";
            spanR.innerHTML = " ";
            wrapper.appendChild(spanR);
            button.parentNode.insertBefore(wrapper, button);
            wrapper.appendChild(button);
        }
        artEventHelper.bind(button, 'mouseover', function(e) {
            e = e || window.event;
            wrapper = (e.target || e.srcElement).parentNode;
            wrapper.className += " hover";
        });
        artEventHelper.bind(button, 'mouseout', function(e) {
            e = e || window.event;
            button = e.target || e.srcElement;
            wrapper = button.parentNode;
            wrapper.className = wrapper.className.replace(/hover/, "");
            if (!artHasClass(button, 'active')) wrapper.className = wrapper.className.replace(/active/, "");
        });
        artEventHelper.bind(button, 'mousedown', function(e) {
            e = e || window.event;
            button = e.target || e.srcElement;
            wrapper = button.parentNode;
            if (!artHasClass(button, 'active')) wrapper.className += " active";
        });
        artEventHelper.bind(button, 'mouseup', function(e) {
            e = e || window.event;
            button = e.target || e.srcElement;
            wrapper = button.parentNode;
            if (!artHasClass(button, 'active')) wrapper.className = wrapper.className.replace(/active/, "");
        });
    }
}

}

artLoadEvent.add(function(){artButtonsSetupJsHover( "art-button");});

4

3 に答える 3

2

おそらくonloadイベントでjsのスタイルを設定していますが、このイベントは1回だけ発生し、その後はすべてのポストバックで更新パネルが通過しません。次のように、PageRequestManagerのpageloadedイベントにアタッチする必要があります。

ScriptManager宣言の後、このコードを記述すると、内部でポストバックを実行するたびにスクリプトが実行されます。

<script type="text/jscript">
<!--
 var prm = Sys.WebForms.PageRequestManager.getInstance();
 prm.add_pageLoaded(pageLoaded);

 function pageLoaded(sender, args) {
     document.getElementById("Button1").style.fontWeight = "bold";
 }
-->
</script>  

またはSys.Application.add_loadから直接:

<script type="text/jscript">
<!--
 Sys.Application.add_load(
     function pageLoaded(sender, args) {
         document.getElementById("Button1").style.fontWeight = "bold";
     });
-->
</script> 
于 2010-09-14T11:46:25.153 に答える
1

私が考えることができるいくつかのケースがあります

  1. コードビハインドのスタイルを変更します。
  2. スクリプトを使用してスタイルを変更するため、更新後にスクリプトを再度実行することはありません。
  3. ボタンのDOM位置を変更して、この位置でスタイルが機能しなくなるようにします。

。コードを教えていただければ、何が問題なのかがわかるかもしれません。

于 2010-09-14T11:32:57.663 に答える
1

jsでスタイルを設定している場合は、そのjsをページのScriptManagerに登録する必要がある場合があります。そうすれば、スクリプトは部分的なページのポストバックにロードされます。

于 2010-09-14T11:37:31.303 に答える