JQuery将单击事件添加到无线电输入文本

Nic*_*ick 8 html javascript jquery

我希望标签与单选按钮"热"相关联.我开始使用.siblings()方法实现它.我认为必须有更好的方法.单选按钮上的单击事件如下所示:

$(".RadioButton").click(function(event) {

        var questionId = $(this).find('input').attr('name');
        var responseId = $(this).find('input').attr('value');
        var answerText = displayPopupQuizAnswer($(this));
Run Code Online (Sandbox Code Playgroud)

这非常有效.我希望当用户点击单选按钮旁边的文本标签时执行相同的代码.html看起来像这样:

<div class="answers">
<span class="radiobutton>
<input type="radio" name="answer1"/>
</span>
<span class="answertextwrapper">
<a href="return false">this is the text</a>
</span>
</div>
Run Code Online (Sandbox Code Playgroud)

这是简化但很接近.我想要的是用class ="answertextwrapper"捕获元素上的click事件,即$(".answerwrapper").click

因此,我需要在单击文本时以某种方式引用输入.合理?

有任何想法吗?

Pet*_*ley 30

简单,使用实际的标签元素 ;

当您使用它们时,不仅可以获得良好的可用性,而且它们的单击事件也会绑定到单选按钮的单击事件.换句话说,您不必再执行任何其他jQuery,只需更新您的HTML即可.

这里有它 - 如果你有萤火虫你可以清楚地看到$(this)总是指的是<input>,无论你是否真的点击相应的<label>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(function()
{
  $('input.quiz-button').click( function( event )
  {
    console.log( $(this) );
  })
} );

</script>

</head>
<body>
  <form id="test" name="tester">
    <input class="quiz-button" type="radio" name="answer1" id="answer1"/>
    <label for="answer1">this is the text 1</label>
    <input class="quiz-button" type="radio" name="answer2" id="answer2"/>
    <label for="answer2">this is the text 2</label>
  </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 你应该得到+1只是因为保罗不知道这件事的简单事实.@Paulo - 你是jQuery的Jon Skeet :-) (6认同)

Pao*_*ino 5

您可以提出某种遍历技术以满足您的需求,但我建议您使用该<label>元素:不仅是语义上正确的方法,您可以添加for属性以将其指回输入字段它是一个标签:

<div class="answers">
    <span class="radiobutton>
       <input type="radio" name="answer1" id="answer1"/>
    </span>
    <label class="answertextwrapper" for="answer1">
        this is the text
    </label>
</div>
Run Code Online (Sandbox Code Playgroud)

然后你的Javascript看起来像这样:

$("span.RadioButton").click(function(event) {
    //...
});
Run Code Online (Sandbox Code Playgroud)

需要注意的是很多更好的预先设置的标签名,当你在Javascript中做类选择(详见注释).我也删除了空链接,因为这样做也是一种不好的做法.您应该只在CSS中添加游标声明,如果您想要手牌出现的话.

  • 有一个_huge_性能增益.使用类选择器,jQuery必须查看文档中的每个单元素以查看它是否具有您要求的类.如果你执行span.classname,jQuery可以使用本机(和快速)getElementsByTagName和THEN按类名过滤掉. (3认同)