无法在Javascript / jQuery中的单独函数中破坏嵌套函数

时间:2015-10-21 20:43:28

标签: javascript jquery

我正在尝试将输入方法添加到具有相同类的多个dom元素。当on input函数嵌套在each函数内时,它正在工作。当我尝试将它们分成两个独立的功能时,它无法工作。

这是工作版

$('.textField').each(function(index, element){

    var currentField = $(this);
    var currentFieldCheckboxId = "#" + currentField.attr('name')+"Checked1";
   // Look for changes in the value
   currentField.on('input', function(event){
      // If value is NOT empty
    if ($.trim(currentField.val()) != '' ) {

        // if text fields are unchecked
        if (!$(currentFieldCheckboxId).is(":checked")){

            $(currentFieldCheckboxId).click();  
        }        
    } else {
        // If text fields are empty
        if ($(currentFieldCheckboxId).is(":checked")){ 

            $(currentFieldCheckboxId).click();
        }
    }
   });
});

不工作的版本。即使.textField不为空,它也不会进入非空状态。

$('.textField').each(function(index, element){

    var currentField = $(this);
    var currentFieldCheckboxId = "#" + currentField.attr('name')+"Checked1";
   // Look for changes in the value
   currentField.on('input',qwer(currentFieldCheckboxId,currentField,event));
});

function qwer(currentFieldCheckboxId,currentField,event){
      // If value is NOT empty

    if ($.trim(currentField.val()) != '' ) {
        console.log("not empty field " + currentField.val());
        // if text fields are unchecked
        if (!$(currentFieldCheckboxId).is(":checked")){

            $(currentFieldCheckboxId).click();  
        }        
    } else {
        console.log("Empty field " + currentField.val());
        // If text fields are empty
        if ($(currentFieldCheckboxId).is(":checked")){ 

            $(currentFieldCheckboxId).click();
        }
    }
   }

1 个答案:

答案 0 :(得分:2)

您要做的是将函数(在您的情况下为函数对象qwer)传递给另一个函数(on函数)。你实际做的是调用该函数(qwer),并将结果传递给另一个函数(结果实际上是undefined,因为你不从qwer返回任何内容。)

qwer< - 这是函数对象

qwer(currentFieldCheckboxId,currentField,event)< - 这是被调用函数的结果

如果要将某些参数传递给qwer,则需要创建另一个要调用的函数。

试试这个:

currentField.on('input', function(event) {
    qwer(currentFieldCheckboxId, currentField, event);
});