2

我已经看到像 onclick、mouseover 等内联/html 事件的使用越来越少,建议使用 Javascript 注册事件。

我目前有一些 HTML,例如:

<ul id="supported-locations">
    <li onclick="setLocationId(32);">Mexico</li>
    <li onclick="setLocationId(35);">Mongolia</li>
</ul>

哪个工作正常,但我现在想在没有 HTML 中的“onclick”的情况下执行此操作,但仍然能够检索 ID 号。

<li>元素通过 AJAX 检索,而用户在输入框中键入它会查询数据库并检索数据而不加载页面。

当用户单击其中一个国家/地区时,它将运行该setLocationId功能,该功能只需使用所选国家/地区的 ID 设置一个隐藏的 HTML 表单元素,这样我就可以在提交表单后使用它。

<li>当国家和他们的 ID 总是不同的并且根据用户在框中键入的内容而变化时,如何为这些注册事件侦听器?

4

8 回答 8

3

使用数据属性来保存数字。在 onclick 事件中,读取被点击元素的属性。

HTML:

<ul id="supported-locations">
    <li data-code="32">Mexico</li>
    <li data-code="35">Mongolia</li>
</ul>

JavaScript:

$("#supported-locations").on("click", "li", function() {    
    var li = $(this);
    console.log(li.data("code"));
});

例子:

JSFiddle

于 2013-08-28T12:56:28.327 回答
3
<ul id="supported-locations">
    <li data-id="32">Mexico</li>
    <li data-id="35">Mongolia</li>
</ul>

在 jQuery 中

$('#supported-locations').on('click','li',function(){
  setLocationId($(this).data('id'));
})
于 2013-08-28T12:57:47.040 回答
2
<ul id="supported-locations">
    <li data-id="32">Mexico</li>
    <li data-id="35">Mongolia</li>
</ul>

jQuery(function(){
$('#supported-locations li').click(function(){
alert($(this).data('id'))
})
})
于 2013-08-28T12:57:23.543 回答
2

我建议给动态加载的元素一个类,然后使用 jquery .on( http://api.jquery.com/on/ ) 方法将事件侦听器注册到属于一个类的元素,即使是那些动态加载的元素。

然后你可以读出存储在元素中的数据(以 data-something 属性的形式)。

于 2013-08-28T12:57:41.097 回答
2
<ul id="supported-locations>
    <li id="32">Mexico</li>
    <li id="35">Mongolia</li>
</ul>

//jQuery

$("#supported-locations > li").on('click',function(){
setLocationId($(this).attr('id'));
});
于 2013-08-28T12:57:45.587 回答
2

当您注册您的活动时,您仍然可以使用它,它链接到 HTML 元素。

换句话说,你仍然可以做这样的事情

<li id="YOUR_ID">Mexico</li>

并获取 li 标签的 id

于 2013-08-28T12:57:50.380 回答
1

您可以将事件处理程序附加到li

<ul id="supported-locations">
    <li id="location32">Mexico</li>
    <li id="location35">Mongolia</li>
</ul>

$("#supported-locations li").click(function() {
    alert($(this).attr("id"));
});

http://jsfiddle.net/puL95/

于 2013-08-28T12:56:07.277 回答
0

试试这个。

 $("#supported-locations li").click(function() {
    alert("me")
    }
于 2013-08-28T12:57:19.273 回答