【问题标题】:Jquery - Dynamically pass parameters to functionJquery - 动态地将参数传递给函数
【发布时间】:2012-07-30 22:42:29
【问题描述】:

我什至不确定我是否以正确的方式提出或解决这个问题,但如果我只是展示它可能会更容易。基本上,我试图通过function 将每个div 的attr 作为parameter 运行,并让它根据该div 的属性返回不同的结果。

如您所见,该示例是一组下拉菜单,当您单击容器 div 中的链接时会出现这些下拉菜单。如果您进行选择,它会将其保存为父 div 中的属性。当您单击退出然后返回容器时会出现问题......而不是使用适当的默认值或选择显示重新显示每个下拉列表,它只是反映了它旁边的a 的结果。

http://jsfiddle.net/nosfan1019/b7F6x/5/

TIA

【问题讨论】:

  • 尝试在您的示例中添加一些 cmets,这很难阅读,恕我直言
  • 尝试将变量重命名为比asdf 和eeee 更清晰的名称。
  • 很抱歉。通过并添加了 cmets 和更好的变量。 jsfiddle.net/nosfan1019/b7F6x/5

标签: javascript jquery function parameters parameter-passing


【解决方案1】:

我插入了一些console.log() 语句来查看您的各种jQuery 选择器发生了什么。我观察到以下几点:

  • 当我点击第一个“点击”节点时,_container 是“顶部”
  • 因此,在您对三个 div 的迭代中,您选择了包含在“top one”类的 div 中的“dd”类的两个 div
  • 传递给函数select() 的参数_attr 和_parent 对于处理的每个节点都是相同的,从而为两个“dd”框提供相同的结果。

我认为您想更改用于定位要修改的节点的选择器。

【讨论】:

  • 这就是我试图在某种意义上描述的内容。所以它不是传递某种形式的数组作为参数的问题,你不觉得吗?
  • 我不认为问题出在参数和函数调用上,我认为这只是选择您想要操作的对象。如果您在 else://$(this).find('.dd').empty(); 中注释掉该行,这会给您带来想要的行为吗?否则会明确清除其他两个“顶部”div 中的两个 div。
  • 不完全,但这可能必须奏效。这个想法是,当页面的另一部分被占用时,它们会隐藏或转到纯文本。哦,好吧...感谢您的帮助
【解决方案2】:

foo = foo.find('.dropdown-toggle').html(_new + '<b class="caret"></b>');

通过这一行,您将获得两个 div,因此您更改了两个值(如果值是从下拉列表中选择的)。

正确恢复所选值:

function modified(_select) {
    console.log("modify");
    foo = $('#box').html();
    foo = $(_select).html(foo);
    // iterate on collection to restore selected value from selection tag;
    foo.filter("div[selection]").each(function(i, v){
        var selected = $(v).attr('selection');
        $(v).find('.dropdown-toggle').html(selected + '<b class="caret"></b>');                
    });                
}

然后,需要检查是否有任何 parentDiv 具有 [selection] attr:

if($(y).filter("div[selection]").length > 0){
    return modified(y);
}         

http://jsfiddle.net/b7F6x/50/

【讨论】:

    猜你喜欢
    • 2012-02-13
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2013-01-27
    • 2010-09-27
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多