2011-10-18 101 views
-2

所以這看起來很有名,但有點不同。從服務器端調用JavaScript函數?

JavaScript函數:

function ShowMessage(Message, Title, isAlarm) { 
     $("#dtext").html(Message); 
     $("span.ui-dialog-title").text(Title); 
     $("#dialog").dialog({ 
      open: function(e) { 
       var Dia = $(e.target); 
       if (isAlarm == true) { 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("background", "red"); 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("color", "White"); 
       } 
       else { 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("background", "LightSeaGreen"); 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("color", "White"); 
       } 
      }, 
      show: "blind", 
      hide: "clip", 
      modal: true, 
      resizable: false, 
      buttons: { 
       "Close": function(e) { 
        $(this).dialog("close"); 
        return true; 
       } 
      } 
     }); 
    } 

正如你看到的這個方法填充jQuery的代碼。如果這只是java腳本,我們可以使用此代碼來調用該函數,但在這種情況下,此方法效果不佳。

C#調用JS方法:

if (!Pointer.ClientScript.IsStartupScriptRegistered("message")) 
     Pointer.Page.ClientScript.RegisterStartupScript 
      (Pointer.Master.GetType(), "message", "ShowMessage('messageBox','" + Message + "',false);", true); 

我不知道如何解決這個問題。 I Want just call this Js function from server-side?

編輯1

感謝您的關注。有些人想從我這裏更好地描述我的問題。爲什麼我不能? Cuz I don't know what's exactly problem

我可以說,我測試這個程序使用Firebug和對JS的功能,但在運行時,第一行設置斷點,當我將其稱爲是突破點Hit幾毫秒和JS函數,那麼頁面重載雲完成並沒有發生。

我是JS和jQuery的新手。所以反而打倒投票plz 嘗試這些代碼的示例程序,並幫助我

再次感謝(特別斯特凡,PirateKitten,Widor)

編輯2

我做了這個Function(JQuery Message Function)更換Old Function只使用簡單的JS警報。我必須說舊版本的工作(即使我從服務器端調用JS編寫的調用函數)。

在這種情況下

,即使I call new Function(JQ Function) with Js頁面,如:

<button type="button" onclick="ShowMessage('hi','title',false)"> 
    Display Message 
</button> 

它的工作,但when call that from server side, Function don't work

+2

它可能是早期調用函數?這個改變是否工作? 'Pointer.Page.ClientScript.RegisterStartupScript(Pointer.Master.GetType(),「message」,「$(function(){ShowMessage('messageBox',」+ Message +「',false);}」,true); ' –

+1

你應該添加你確切的問題是什麼JS錯誤?服務器錯誤?等 – Stefan

+0

你說過「工作不好」,你的意思是什麼?你的JavaScript沒有正確渲染,你看過嗎?看看你是否有任何JS錯誤? – Kasaku

回答

2

簡單地說;你不能。

JavaScript運行客戶端,C#運行服務器端。

但是,您可以生成 JavaScript serverside並將其輸出到客戶端。

見我的答案在這裏:與Page.ClientScript.RegisterStartupScript註冊的「渲染」,在頁面的最後Call javascript from vb.net code behind

+0

我這樣做,作爲示例我在函數中使用簡單的警報,並從該調用方法後面的代碼中調用該函數。 – Rev

1

代碼。準確地在form關閉標記之前的script標記中。但是,代碼可能在DOM樹完全生成之前運行。

由於您的ShowMessage函數訪問DOM樹,因此您的問題可能與丟失DOM樹元素有關。

如果我正確解釋你的問題,那麼頁面上沒有JS錯誤。這chould是因爲jQuery選擇行爲的結果:

$("#dtext").html(Message); 

這將設置所有元素的HTML與ID DTEXT。由於ID dtext可能沒有元素,因此$("#dtext")將返回一個空集合並且不採取任何操作。

要解決此問題,您可以嘗試在jquery文檔就緒事件中運行代碼。 jQuery的觸發這個事件,如果是完全載入網頁:

$(document).ready(function() { ShowMessage('messageBox','" + Message + "', false); } 

ServerCode:

if (!Pointer.ClientScript.IsStartupScriptRegistered("message")) 
     Pointer.Page.ClientScript.RegisterStartupScript 
      (Pointer.Master.GetType(), "message", "$(document).ready(function() {ShowMessage('messageBox','" + Message + "',false); }", true); 
+0

反映了問題的變化。 – Stefan

+0

你的解決方案沒有工作,但+1指向Dom樹和使用JQuery事件 – Rev

+0

@Rev:你應該嘗試給你一個更好的解釋你的問題。什麼是不工作。 「但在這種情況下,這種方法效果不佳。」是一個相當溫和的問題描述。這就是爲什麼你的答案有三個downvotes ... – Stefan

-1

你可以調用JS功能從服務器端這樣

Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "ShowMessage()",true); 

希望這將有助於你

+0

PLZ看看我的問題,這不是解決方案 – Rev

相關問題