iT邦幫忙

0

asp.net js的function呼叫兩個CodeBehind的程式,但只會執行一個

  • 分享至 

  • xImage

當我點擊button時觸發SaveEqp()
有成功執行alert("執行btnSave1")跟alert("執行btnSave2")
但是Code behind只執行了btnSave2_Click()

如果我將SaveEqp()裡的執行順序對調,他只會執行最後一筆

請問是什麼原因造成的?有什麼解決辦法嗎?

.asp程式

<script language="javascript">
    function SaveEqp() {
        if (true) {
            alert("執行btnSave1");
            $("#<%=btnSave1.ClientID%>").click();
           }
         if (true) {
             alert("執行btnSave2");
             $("#<%=btnSave2.ClientID%>").click();
        }
    }
</script>
 <div style="display:none" >
     <asp:Button ID="btnSave1"  runat="server" Text="Save" OnClick="btnSave1_Click"  />
     <asp:Button ID="btnSave2"  runat="server" Text="Save" OnClick="btnSave2_Click"  />
 </div>
 <button class="btn btn-primary"  onclick="SaveEqp();return false;" >Save</button>

.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{

}
protected void btnSave1_Click(object sender, EventArgs e)
{
    Response.Write("btnSave1_Click");
}
protected void btnSave2_Click(object sender, EventArgs e)
{
    Response.Write("btnSave2_Click");

}
你要不要,先檢查一下你的網頁原始碼。
確定一下 ????? 帶的是什麼?
```
("#??????").click();
```
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
Samuel
iT邦好手 1 級 ‧ 2024-04-30 07:25:32

或許你可以嘗試包在同一個button event中

protected void btnSave_Click(object sender, EventArgs e)
{
    // 執行原本 btnSave1_Click 的代碼
    Response.Write("btnSave1_Click");

    // 執行原本 btnSave2_Click 的代碼
    Response.Write("btnSave2_Click");
}

同一個JavaScript函數中連續觸發兩個按鈕的點擊事件,提交了一個表單會造成postback
無論你怎麼調整兩個click()的順序,只有最後一個按鈕的事件會被觸發。

asp:Button 這類的tag就是俗稱的Server Control
https://coolmandiary.blogspot.com/2019/03/aspnetserver.html

不然可改成ajax方式去觸發後端webmethod
https://coolmandiary.blogspot.com/2021/03/aspnetjquery-ajaxjquery-sortablediv.html

jiun917 iT邦新手 5 級 ‧ 2024-04-30 08:18:46 檢舉

大致了解。
那請問在IE模式下為什麼不會有上述的問題?

froce iT邦大師 1 級 ‧ 2024-04-30 09:20:08 檢舉

理論上是兩個都會觸發,但遇到post的時候,因為頁面會重導向,前端會重新載入新的頁面,所以另外一個事件可能沒有被觸發完成就被廢棄。

ie可能是因為post的速度本身就慢,剛好可以讓另外一個事件觸發完才post出去。

0
純真的人
iT邦大師 1 級 ‧ 2024-04-30 11:18:46

這個問題~若要送兩個表單位置~

我會用 iframe 標籤 利用js改變 form 的 target action

例如

<form id="form1" target="iframe_form1" action="">
...
</from>
<iframe id="iframe_form1" style="width:0px;heught:0px"></iframe>

<script>
    function SaveEqp() {
        var form1 = document.getElementById("form1");
        if (true) {
            alert("執行btnSave1");
            form1.action="123.aspx";
            $("#<%=btnSave1.ClientID%>").click();
           }
         if (true) {
             alert("執行btnSave2");
             form1.action="456.aspx";
             $("#<%=btnSave2.ClientID%>").click();
        }
    }
</script>
jiun917 iT邦新手 5 級 ‧ 2024-04-30 21:55:25 檢舉

有點不太清楚你的意思,有相關的文章可以讀嗎?

沒有~哈~因為我都是隨意寫程式(能正常就好)

我要發表回答

立即登入回答