Textarea上的Jquery捕获事件不起作用,但在Textbox上

时间:2014-04-19 05:13:40

标签: jquery javascript-events

我在理解为什么我开发的代码没有在TextArea上注册Jquery Blur / OnBlur事件时遇到问题,但是相同的代码适用于Text输入框。

这是在ASP.NET C#中,但我已将问题分解为JSFiddle中的基本步骤 - http://jsfiddle.net/RdSme/

我添加了第二个文本框和textarea,仅用于测试:

<input id="TxtTest1" type="text" />TextBox Working
<p/> 

<textarea id="TxtTest2" cols="20" rows="2"></textarea>TextArea Not Working
<p/> 
<input id="TxtTest3" type="text" /> Empty Textbox
<p/> 
<textarea id="TxtTest4" cols="20" rows="2"></textarea> Empty TextArea


$(function () {
    $('input[id*=TxtTest1]').bind("blur", function () {   
        var risks = {};
        risks.Source11 = $("[id*=TxtTest1]").val();
        alert("Step 1");    
    });
});

$(function () {
    $('input[id*=TxtTest2]').bind("blur", function () {   
        var risks = {};
        risks.Source11 = $("[id*=TxtTest2]").val();
        alert("Step 1");    
    });
});

背景。当用户离开输入框或更改单选按钮或复选框时,所有输入字段都会将更改发送回数据库。该代码适用于asp.net TextBox,即使在DataList中也是如此。理想情况下,我需要一种“模板”方式来捕获对输入所做的更改,然后为单选按钮/复选框和下拉列表添加类似的模板。

非常感谢您的帮助

作为一个快速跟进的问题;下拉列表,复选框和单选按钮需要什么选择器?

2 个答案:

答案 0 :(得分:1)

因为您没有定位textarea

您只是定位input而不是textarea

你可以这样做:

$(function () {
    $('[id^=TxtTest]').bind("blur", function () {   
        alert("Step 1");    
    });
});

以上将全部选择。

为了定位textarea,您必须执行$('textarea[id*=TxtTest2]'),您可以将其简化为:$('#TxtTest2'),因为ID是唯一的。

答案 1 :(得分:1)

您的selector textarea不正确。使用:inputhttp://api.jquery.com/input-selector/)或保持简单并使用元素ID。

尝试:

$(":input[id*='TxtTest2']").bind("blur", function () {
    var risks = {};
    risks.Source11 = $("[id*=TxtTest2]").val();
    alert("Step 2");
});

OR:

$("#TxtTest2").bind("blur", function () {
    var risks = {};
    risks.Source11 = $("[id*=TxtTest2]").val();
    alert("Step 2");
});

小提琴:http://jsfiddle.net/PTW66/1/