我有一个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文件中。 如何将函数传递到文件中?
答案 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
中一样。