3

我正在学习 javascript,并正在尝试调整以下内容:

$('#myform').change(function() {
    if ($('#sv_I4b').attr('checked')||$('#sv_I4c').attr('checked')){
        $('#sv_I5').removeClass('hidden');
    } else {
        $('#sv_I5').addClass('hidden');
    }
});

成为一个函数,我可以调用不同的事件,例如页面加载等。

我还没有完全理解每个元素,但我知道:

    if ($('#sv_I4b').attr('checked')||$('#sv_I4c').attr('checked')){
        $('#sv_I5').removeClass('hidden');
    } else {
        $('#sv_I5').addClass('hidden');
    }

是函数的核心“逻辑”:if (condition) {then this} else {that}

或多或少地了解那里发生了什么。哪个留下了边界javascript(有比这更好的术语吗?):

$('#myform').change(function() {...});

我的问题(以下是否属实等):

  • 我认为美元表示它是 jQuery
  • 我的表单的 id 显然与该表单中的事件有关(命名空间?)
  • .change 似乎是一个触发器,它倾听...在#myform 中发生的任何变化?所以每次在#myform中发生变化时都会运行?这似乎效率低下
  • function() 我还不明白匿名或空函数的作用,只是将 {} 中包含的内容定义为函数?

我的目标:能够拥有类似的东西

function myfunction()
{
if ($('#sv_I4b').attr('checked')||$('#sv_I4c').attr('checked')){
        $('#sv_I5').removeClass('hidden');
    } else {
        $('#sv_I5').addClass('hidden');
    }
}

进而

$(function() {myfunction});

所以我可以在页面加载时调用该函数,但我不想失去 .change 语法为我提供的功能(当用户与页面上的元素交互时它也会改变。

为普遍而繁琐的无知道歉

4

2 回答 2

2

你猜到了如何正确定义函数——也就是说,

function myfunction()
{
if ($('#sv_I4b').attr('checked')||$('#sv_I4c').attr('checked')){
        $('#sv_I5').removeClass('hidden');
    } else {
        $('#sv_I5').addClass('hidden');
    }
}

工作得很好。然而,这:

$(function() {myfunction});

应该写成:

$(myfunction);  // Run on page load.
$('#myform').change(myfunction);  // ...and also run it when the form changes.

但是,除非在脚本运行时表单存在,否则在页面加载之前第二行实际上不会起作用,因此您可能希望将其更改为:

$(function() {  // On page load, run this anonymous function:
    myfunction();  // Run the function now (where now, at this point, is page load).
    $('#myform').change(myfunction);  // ...as well as when the form changes.
});
于 2012-11-23T00:49:26.417 回答
1
  • $jQuery的简写符号,本质上是 jQuery 框架的任何函数的命名空间。
  • my_form 是一个 DOM 选择器。$('#my_form') 将匹配的 DOM 元素包装为 jQuery 对象,添加各种有用的方法和属性。
  • .change()是一个事件侦听器,正如您所猜测的,它监视该 jQuery 对象上的更改事件。这有点低效 - 请看一下.on()
  • 匿名函数(闭包)最有用的行为是创建私有范围,这是 javascript 不提供的。
于 2012-11-23T01:11:22.473 回答