Javascript 我使用的是$(此)还是.单击错误?

Javascript 我使用的是$(此)还是.单击错误?,javascript,jquery,Javascript,Jquery,我试图建立一个简单的FAQ页面,当他们的问题被点击时,答案会上下滑动。当用户单击类为“question”的某物时,我希望mytarget变成“#”+[该问题的id]+“ans”,以便相应的答案向下滑动 当我只给它一个答案的ID时,toggleSlide部分工作;我不确定我的.click函数是否错误,或者我使用的$(this)是否错误,或者两者都错误 $(document).ready(function() { var qid = ''; var mytarget = '';

我试图建立一个简单的FAQ页面,当他们的问题被点击时,答案会上下滑动。当用户单击类为“question”的某物时,我希望mytarget变成“#”+[该问题的id]+“ans”,以便相应的答案向下滑动

当我只给它一个答案的ID时,toggleSlide部分工作;我不确定我的.click函数是否错误,或者我使用的$(this)是否错误,或者两者都错误

$(document).ready(function() {
    var qid = '';
    var mytarget = '';

    function toggleSlide() {
        if ($(mytarget).css('display') == 'none') {
            $(mytarget).slideDown(600, 'swing');
        }

        else if ($(mytarget).css('display') == 'block') {
            $(mytarget).slideUp(600, 'swing');
        }
    };

    $('.answer').hide();
    $('.question').click(function() {
        qid = $('this').id();
        mytarget = '#' + qid + 'ans';
        toggleSlide();
    });
});​
更改为:

$('this').id();
致:

  • 这是javascript中的关键字,而不是字符串
    
  • jQuery中没有
    id
    函数,您可以使用
    .attr('id')

    id
    是DOM元素的属性。所以你可以使用这个:
    this.id

不做:
qid=$('this').id()

do:
qid=$(this.attr('id')不带单引号

尝试以下操作:

$(function() {  // shorthand for $(document).ready()...
    $('.answer').hide(); // preferably div.answer if they are all <div>s
    $('.question').click(function() {
        // no need to check what it currently is, use slideToggle
        $('#' + this.id + 'ans').slideToggle(600, 'swing');
    });
});
$(function(){//$(document.ready()的缩写)。。。
$('.answer').hide();//如果它们都是s,最好是div.answer
$('.question')。单击(函数(){
//无需检查它当前的状态,请使用slideToggle
$('#'+this.id+'ans').slideToggle(600,'swing');
});
});
调用函数时,应传递参数:

  qid = $(this).id();
  mytarget= '#' + qid + 'ans';
  toggleSlide(mytarget);

什么是
$(…).id()
?没有这样的
id
函数。@gdoron,你说得对。专注于这对“这”。现在显示正确的解决方案。谢谢gdoron。我不确定我是从哪里知道.id()是个东西。我写这篇文章是在一次没有互联网的汽车旅行中,在手机上做研究,一定是在没有阅读上下文的情况下学会了这个功能。@gdoron。别担心,我没有喝醉。@user1354606。读笔记。谢谢!为什么div.answer比.answer更可取?我喜欢这个。不过,div.answer实际上并不可取。jsPerf可以显示没有元素的普通类会更快。另外,我仍然喜欢使用$(document.ready(),因为任何人(我自己或其他人)在阅读代码时都会立即意识到它是document ready函数。但是那部分是个人偏好。
$(this.attr('id')
=>
this.id
@gdoron,
=>
是否意味着
等于或大于
,或者它是否意味着
应该转换为
PHehe@XyanEwing. 这意味着执行的时间比…:)要长
$(function() {  // shorthand for $(document).ready()...
    $('.answer').hide(); // preferably div.answer if they are all <div>s
    $('.question').click(function() {
        // no need to check what it currently is, use slideToggle
        $('#' + this.id + 'ans').slideToggle(600, 'swing');
    });
});
function toggleSlide(mytarget) {
  if ($(mytarget).css('display')=='none'){
      $(mytarget).slideDown(600, 'swing');}

  else if ($(mytarget).css('display')=='block'){
         $(mytarget).slideUp(600, 'swing');}
});
  qid = $(this).id();
  mytarget= '#' + qid + 'ans';
  toggleSlide(mytarget);