【问题标题】:Jquery how to use variable as identifier for .change() function?Jquery 如何使用变量作为 .change() 函数的标识符?
【发布时间】:2017-01-25 03:15:29
【问题描述】:

现在我是 Javascript/Jquery 的初学者。 我想创建一个动态代码,以便在网站出现一些新功能时它可以工作,而无需编辑代码。

现在我刚刚在一些帖子中阅读了如何使用变量作为 id 的标识符,但它对我不起作用。下面是一个例子:

var category;
$('#mainCategory').change(function (event) {
   checkboxID = event.target.id;
   category="category"+checkboxID;
   ...some code...
});
$("#"+category).change(function (event) {
    $('#category'+checkboxID+' :input').attr('class','' );
    console.log("var: "+category);
});

因此,当我使用整个表达式而不是使用变量时,函数 mainCategory 总是在另一个函数之前运行,并且类别在第二个函数中写入正确。 我希望你能帮助我。

html代码部分:

 <form method="post" action="../php/saveTraining.php">
    <section id="mainCategory" class="hidden">
        <label><input type="checkbox" id="Krafttraining">Krafttraining</label>
        <label><input type="checkbox" id="Joggen">Joggen</label>
    </section>
    <section id="categoryKrafttraining" class="hidden">
        <label><input type="checkbox">Kurzhantel</label>
        <label><input type="checkbox">Bankdrücken</label>
        <label class="hidden"><input type="number" id="saetze">Sätze</label>
        <label class="hidden"><input type="number" id="wiederholungen">Wiederholungen</label>
    </section>
    <input type="hidden" id="saveTraining" name="sent" value="save" class="hidden"/>
</form>
因此,实际发生的是,当检查MainCategory的复选框时,将出现第二部分的复选框。 但是当我选中第二部分的复选框时,没有任何反应。

【问题讨论】:

  • 忘记写 var checkboxID;作为全球
  • 除非您在我们看不到的地方手动调用 mainCategory 更改函数 - 创建处理程序时 category 未定义。
  • 您将checkboxID 添加到“类别”以使category 变量...然后在调用attr() 时将其再次添加到处理程序中。即使修复了其余代码,除非您的 HTML 比我们想象的要怪异得多,否则它也不会起作用。你能展示你正在使用的 HTML 吗?
  • 最好使用一个你关心的所有元素都会给出的类。然后,您可以使用事件委托来动态添加该类的成员。见stackoverflow.com/questions/203198/…
  • 显示一些与此相关的html

标签: javascript jquery html web


【解决方案1】:

我之前以为我有解决方案,但我发现我错了。我相信这应该可行,您可以在其中重新添加侦听器作为 var category 更改的值:

var category;
$('#mainCategory input[type="checkbox"]').change(function (event) {
     checkboxID = event.target.id;
     category="category"+checkboxID;

     $('#' + category).find('input[type="checkbox"]').off("change").on("change", function (event) {
         $('#category'+checkboxID+' :input').attr('class','' );
         console.log("var: "+category);
     });
 });

您需要重新添加侦听器,因为新元素将作为 var 类别更改的目标。

【讨论】:

  • 当您设置on() 处理程序时,category 仍然不是null(或者,更确切地说,未初始化)吗? $("#"+category) 现在如何有效?你的意思是$(document).on('change', '#category', function...
  • 感谢它是这样工作的,但我真的不明白为什么。因为mainCategory函数在本节中的某事会发生变化时被调用,对吗?但是第二个函数的形式相同,但在另一个部分中。我将在上面添加html代码。
  • 这不是一个好方法。如果您从#mainCategory 中选择相同的类别,它将导致将多个处理程序添加到#+category
  • 如果用户多次选择同一个项目,这将复合事件监听器
  • 是的,起初我只想听 mainCategory 中所有被选中的复选框,第二个未被选中的复选框,但不知何故,复选框的选择器不起作用
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多