您好 我正在使用母版webmethod调用自动完成我的代码js是
$(document).ready(function(e) {
$('#ctl00_TextBox1').keyup(function(e) {
//$('#ctl00_ContentPlaceHolder1_txtTest').keyup(function(e) {
alert("hi");
var msgbox = $("#status");
var tx_val = document.getElementById("ctl00_TextBox1").value;
alert(tx_val);
if (e.keyCode != 40 && e.keyCode != 39 && e.keyCode != 38 && e.keyCode != 37) {
// debugger;
// alert("hi");
//debugger;
$.ajax({
// alert("ajax");
type: "POST",
//Page Name (in which the method should be called) and method name
url: "Default.aspx/CheckDateTime",
// If you want to pass parameter or data to server side function you can try line
data: "{'args':'" + tx_val + "'}",
//else If you don't want to pass any value to server side function leave the data to blank line below
// data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
//Got the response from server and render to the client
msgbox.html(msg.d);
}
});
};
});
});
我的问题是,当我使用母版页页面代码无法正常工作时,此代码在普通页面(如aspx页面)中运行
表示代码在ajax扩展无效后运行到alert(tx)val);
答案 0 :(得分:0)
您的ID将根据它们所在的页面(或更确切地说,嵌套方式)而改变,首先我要替换它:
var tx_val = document.getElementById("ctl00_TextBox1").value;
有了这个:
var tx_val = $(this).val();
您的选择器(如果在页面中)执行此操作:
$('#<%=TextBox1.ClientID%>').keyup(function(e) {
如果它在页面之外,请给它一个这样的类:
<asp:TextBox Id="TextBox1" CssClass="dateTime" runat="server" />
并将该类用于您的选择器:
$('.dateTime').keyup(function(e) {
....这也允许您将脚本完全移到外部,而不是依赖于页面生成的任何内容。
另一个潜在问题是"Default.aspx/CheckDateTime"
与当前路径无关,请确保您认为合适,您可能需要一个绝对路径,例如"/Default.aspx/CheckDateTime"
......我可以'如果这是在每个页面上,或者在您总想要访问的单个页面上,请告知您的已发布代码。
答案 1 :(得分:0)
因为文本框的客户端ID不再是ctl00_TextBox1。使用母版页时,contentplaceholder id也会附加到客户端ID。所以你最好使用Nick Craver建议的方法,或者通过设置断点并读取ClientID属性来获取新的clientid
答案 2 :(得分:0)
您也可以按类找到该元素,而不是id。
<asp:TextBox runat="server" CssClass="input" />
然后将你的js更新为:
var tx_val = $(".input").value;
答案 3 :(得分:0)
你需要更改你的选择器,类似下面的代码应该可以正常工作:
var tx_val = $('input [id $ = TextBox1]')。val();