将函数或模板传递给jQuery文件

时间:2011-05-10 15:14:52

标签: c# jquery .net

我有一个jQuery文件处理一个控件,该控件可以在页面上有多个实例。 每个实例都需要将处理函数和模板传递给控件。 服务器端位于.net / C# 我们将非常感谢代码片段。

[编辑] 在我的页面上:

<script type="text/javascript">
    $("#<%=AutoSearch1.ClientID %>").bind('AutoSearch_Changed', function (e, data) {
        if (data == "") {
            $('#<%=cbUntilOnDate.ClientID %>').attr("checked", true);
            $('#<%=cbUntilEndofProgram.ClientID %>').attr("disabled", true);
        }

        else
            $('#<%=cbUntilEndofProgram.ClientID %>').attr("disabled", false);
    });
</script>

<uc1:AutoSearch  runat="server" ID="AutoSearch1"  
    OnTextChangeFuction = "AutoSearch_Changed"/>

在控件中:

public string OnTextChangeFuction { 
    get {}; 
    set {};
}

function ClearAutoSearch() {
    $('#<%=txtSearch.ClientID %>').val('');
    $('#divNoResults').hide();
    $('#divSeeAllResults').hide();
    $('#AutoSearchResults').hide();
    $('#<%=HiddenField1.ClientID %>').val('');

    if ("<%=OnTextChangeFuction %>" != "")
        $("#<%=txtSearch.ClientID %>").trigger("<%=OnTextChangeFuction %>",             
            $('#<%=HiddenField1.ClientID %>').val()); 
}

我想将控制脚本移到单独的.js文件中。 如何将函数传递到文件中?

1 个答案:

答案 0 :(得分:1)

您没有“将函数传递给文件”。您可以使用服务器动态构建javascript文件,并将所需的任何数据值写入所需的数据。但是,这可能不是最好的解决方案。如果你有一个需要调用的函数并且依赖于服务器提供的数据,最好将你的javascript函数放在一个平面的js文件中,并使用服务器在生成你的html文件时提供javascript数据。所以你会做这样的事情:

// in your js file
function ClearAutoSearch(searchFieldIDS) {
   $(searchFieldIDS.textSearchID).val('');
   $(searchFieldIDS.noResultsID).hide();
    // etc
}

// in your server-generated html file
<script>
    // use the server to write javascript which will build a data object
    var searchFieldIDS = {
        textSearchID: '#<%=txtSearch.ClientID %>',
        noResultsID: '#divNoResults' 
    }

    // pass that data object to your function
    ClearAutoSearch(searchFieldIDS)
</script>

请注意,在我的示例中,searchFieldIDS是一个全局变量。为了简单起见,我一直保持这种方式,但在生产代码中,我避免使用全局javascript变量。通过创建自己的顶级命名空间并将变量放在那里(MyNameSpace.searchFieldIDs)来避免全局变量,或者可以在非全局范围内声明它们,就像在jquery的document.ready

中一样。