0

我有一个加载外部 js 的页面,并且在页面上我有一个函数called calculate_totals()。我想要的是calculate_totals()从外部js中的函数调用函数。

这是一段加载到外部 js 中的 JavaScript

function selectItemMouse(thisVar)
{   
    var searchValue = thisVar.attr('data-name');
    thisVar.parent().parent().parent().parent().children('.list').val(searchValue);
    
    
    //alert(thisVar.parent().parent().parent().parent().next().find('input').focus());
    
    thisVar.children().children().each(function()
    {
        var dataId = $(this).attr('data-id');
        var value = $(this).attr('data-name');
        
        //This change the input of my form
        $(thisVar).parent().parent().parent().parent().children().children('.'+dataId).val(value);
    });
    
    $('.customerResults').hide();
    calculate_totals();     
}
4

2 回答 2

1

您可以在输入上放置一个监听器以进行更改:

$(document).ready(function(){
    $('#input').change(function(){
        alert("alert here");
    });
});
于 2013-01-15T11:29:16.100 回答
1

基于评论会话:calculate_totals 在内部定义$(document).ready(function(){});

因为那是在外面看不到的。基本上,它仅在内部可见 $(document).ready(function(){});。把它移到外面就行了。现在它将成为全球性的并且在任何地方都可见。

代替

$(document).ready(function(){
   function calculate_totals() {} // this function is visible inside of a ready function only
  ///..... other code here
});

采用:

function calculate_totals() {} // now it is a part of global context
$(document).ready(function(){
  ///..... other code here   
});

之后,您应该可以在 selectItemMouse 和任何其他地方使用它。

此外,我会考虑更新您的代码。

thisVar.parent().parent().parent().parent().children('.list').val(searchValue);

这种链的使用不灵活。只是您将 thisVar 元素与其他一些元素包装在一起 - 您将需要更新您的 JS 代码。

看看.parents.closest。例如,您可以像这样更改上面的一行:

thisVar.closest(".class_common_parent").children('.list').val(searchValue);

.class_common_parent您使用的元素类在哪里parent().parent().parent().parent().

于 2013-01-15T12:08:08.660 回答