0

我有一个嵌套的列表视图,其中包含多行,每行都包含一个 ddl 和一个文本框,例如:

<ItemTemplate>
    <tr>
        <td>
            <asp:DropDownList id="myDDL" runat="server" CssClass="aDDL"
                onfocus="javaScript:$(function() { 
                $(<selector>).siblings.RemoveClass('wrappedElement');
                $(<selector>).addClass('wrappedElement');
             })" /></td>
        <td><asp:TextBox id="myTextBox" runat="server" CssClass="aTextBox"
                onfocus="javaScript:$(function() { 
                $(<selector>).siblings.RemoveClass('wrappedElement');
                $(<selector>).addClass('wrappedElement');
             })" /></td>
    </tr>
</ItemTemplate>

我想要做的是包装被点击的元素。发生的事情是我包装了所有“aDDL”或“aTextBox”元素。我需要找到刚刚关注的元素的选择器。

我试过这篇文章,但“this”或 $(this) 最终指向整个文档。

4

3 回答 3

1

几个项目:

您不需要为代码添加前缀javascript:,只有链接元素才需要,而是在href属性上调用函数<a href="javascript:...">。(在这种情况下可能更好地绑定到click事件。)

您也不需要用 jQuery 对象包装内联函数。而不是编码:onfocus="javaScript:$(function() { })",尝试onfocus="function()"

最后,您可以将event对象作为处理程序调用的一部分传递,以访问选择器。不确定它是否可以内联:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Scripts/jquery-1.9.1.min.js"></script>
    <script>
        function select(e) {
            var selector = e.target; // "select#options"
            var $selector = $(e.target) // jQuery object wrapping <select>
        }
    </script>
</head>
<body>
    <select id="options" onfocus="select(event)">
        <option value="1">Dog</option>
        <option value="2">Cat</option>
        <option value="3">Horse</option>
    </select>
</body>
</html>
于 2013-02-14T16:53:00.223 回答
0

我会尝试在模板之外的一个地方定义您的 javascript。像这样的东西(来自记忆):

$(".aDDL").focus(function() {
     $(".wrappedElement").RemoveClass('wrappedElement');
     $(this).addClass('wrappedElement');
 });

// etc.

根据我的经验,通过选择器从元素外部分配函数比将它们设置为 HTML 标记的一部分效果更好。

于 2013-02-12T19:31:52.627 回答
0

在 Javascript 中

$(function() { 
    $(".aDDL,.aTextBox").focus(function() {
        $(".aDDL,.aTextBox").RemoveClass('wrappedElement');
        $(this).addClass('wrappedElement');
    });
});

并将其用作您的项目模板

<ItemTemplate>
    <tr>
        <td>
            <asp:DropDownList id="myDDL" runat="server" CssClass="aDDL" /></td>
        <td>
            <asp:TextBox id="myTextBox" runat="server" CssClass="aTextBox" /></td>
    </tr>
</ItemTemplate>

如果您仍想内联,请尝试以下操作。

onfocus="$(function() { 
            var $this = $(document.activeElement);
            $this.siblings.RemoveClass('wrappedElement');
            $this.addClass('wrappedElement');
         })"
于 2013-02-13T08:46:07.587 回答