为什么jquery没有得到输入值?

时间:2017-09-11 13:17:30

标签: javascript jquery asp.net c#-4.0 repeater

我使用了asp.net转发器来重复图像。

我希望在通过jquery单击图像时获取从数据库返回的主键ID,但它显示未定义。我将图像存储在输入文本字段中,然后显示在该字段中但不在警报中。

jQuery的:

function displayStory() {
    var txtIDValue = $(this).find('input[id$=txtID]').val();
    var id = txtIDValue;
    alert(id);
}

中继器:

<asp:Repeater ID="rptrImages" runat="server">
    <ItemTemplate>    
        <div class="col-md-4">
            <div class="thumbnail">
                <input type="text" id="txtID" value='<%#Eval("ID")%>' />
                <asp:ImageButton ID="imgButtonStory" OnClientClick='displayStory();return false;' runat="server" ImageUrl='<%# "UploadedImages/"+ Eval("Image") %>' 
                 CssClass="img-responsive img-rounded" />
            </div>    
        </div>
    </ItemTemplate>
</asp:Repeater>

2 个答案:

答案 0 :(得分:0)

this不引用调用click事件处理程序的元素,它引用window对象。您可以使用.call()设置上下文

<asp:ImageButton ID="imgButtonStory" OnClientClick='displayStory.call(this);return false;' runat="server" ImageUrl='<%# "UploadedImages/"+ Eval("Image") %>' 
                         CssClass="img-responsive img-rounded" />

在脚本中,您需要使用.prev(),因为文本框不是ImageButton

的子元素
var txtIDValue= $(this).prev('input[id$=txtID]').val();
//var txtIDValue= $(this).closest('div').find('input[id$=txtID]').val();

答案 1 :(得分:0)

你可以简单地说:

function displayStory() {
    var txtIDValue = $('input[id="txtID"]').val();
    var id = txtIDValue;
    alert(id);
}

$('input[id="txtID"]')将找到元素<input type="text" id="txtID" value='whatYouAreTryingToFind' />并为其创建一个jQuery选择器。

提示: 在jQuery中,事件的$(this)范围可能很有趣,因此请务必确切地检查它返回的内容Scope and this in JavaScript