【问题标题】:Jquery Var Returned As objectJquery Var 返回为对象
【发布时间】:2011-06-05 23:11:14
【问题描述】:

我正在尝试将变量从一个函数传递给另一个函数,但 var elmId 作为对象返回并给出错误。当我们单击任何生成的 div 时,我们应该能够通过从下拉菜单中选择宽度/高度值来更改 div 的大小。

我正在尝试将单击的 div id(elmId)传递给函数 displayVals,但它不起作用。如果我们将函数 displayVals 中的“#”+elmId 替换为使用“#divid1”创建的第一个 div 的实际 id,那么它可以工作。为什么没有将 var elmId 的值传递给 displayVals

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/themes/base/jquery-ui.css" type="text/css" media="all" /> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js" type="text/javascript"></script>
   <style>
    .aaa{width:100px; height:100px; background-color:#ccc;}
    button{width:100px; height:20px;}    
    </style>

<button class="idiv">div</button>
<select id="width">
    <option>100px</option>
    <option>200px</option>
    <option>300px</option>
</select>
<select id="height">
    <option>100px</option>
    <option>200px</option>
    <option>300px</option>
</select>
<p></p>

<script type="text/javascript">
var divId = 1;

$("button").click(function(){
        var elm = $('<div id=divid' + divId + ' class=aaa></div>');
        elm.appendTo('p');
        divId++;
});

$("p").click(function(e){
    var elmType = $(e.target)[0].nodeName,
    elmId = $(e.target)[0].id;
    return displayVals(elmId);
    });
function displayVals(elmId) {
    var iwidth = $("#width").val();
    var iheight = $("#height").val();
    $("#"+elmId).css({width:iwidth, height:iheight});
    console.log(elmId);
    }

    $("select").change(displayVals);
    displayVals();
</script>

【问题讨论】:

  • 仅供参考,没有必要这样做$(e.target)[0].id;。当您这样做时,您将元素放入 jQuery 对象中,然后将其拉回原处。只需e.target.id

标签: jquery object var


【解决方案1】:

CSS:

.divs{width:100px; height:100px; background-color:#ccc;}
button{width:100px; height:20px;}    
.selected{background:#dd0000;}

jQuery:

<script type="text/javascript">
var divId=1,selecteddiv="";
$("button").click(function(){
    $('p').append('<div id="divid'+divId+'" class="divs"></div>');
    divId++;
});

$(".divs").live("click",function(){
    selecteddiv=$(this).attr('id');
    $(this).addClass('selected');
    return false;
});

function displayVals() {
    if(selecteddiv!=""){
        var iwidth = $("#width").val();
        var iheight = $("#height").val();
        $("#"+selecteddiv).css({width:iwidth, height:iheight});
    }
}

$("select").change(displayVals);
displayVals();
</script>
  • 按钮将创建divid[X]
  • 当您动态生成它们时,您需要live(因为当click 事件被附加到类.divs 时它们不存在)
  • 单击.divs 之一会将ID 名称放入selecteddiv
  • 只是为了告诉你选择了哪个.selected类将被添加到这个div中
  • 当你改变.change 的值时,事件会启动,如果 selecteddiv 不为空,那么它会改变宽度和高度
  • 您可以删除最后一行 displayVals();,因为您没有在开头创建任何 div

我希望这足够有帮助:)

干杯

G.

【讨论】:

  • 太好了,这行得通。我看到你做了什么。你能解释一下return false的目的吗?
  • 对不起,旧习惯,您可以删除它,当您添加点击甚至锚点时,它会阻止默认的号召性用语(在这种情况下不相关):)
  • 没有var infront的var selecteddiv =和seleceddiv有什么区别
  • 如果您在函数外部使用 var name,您将能够从内部为其设置一个值,只要您不使用 var name,您就可以获取和设置该值再次例如在函数内部,抱歉有点混乱,但我现在正在用我的 iPhone 写 :) 我在这里使用了一行来设置两个全局变量,但这与我用逗号分隔它们一样,你可以使用 var除= 1; var selecteddiv="";欢呼
猜你喜欢
  • 2013-01-08
  • 2012-10-14
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
相关资源
最近更新 更多