将clicked元素作为变量传递给另一个函数jquery

时间:2011-01-04 07:43:44

标签: jquery function variables

下面的代码假设我们点击的元素是div。如果单击的元素未知并且我们想要获取元素类型和id然后将其传递给select change()函数以更改它的颜色,该怎么办?实现这一目标的最佳方法是什么?

<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://code.jquery.com/jquery-1.4.4.js"></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;margin-bottom:5px;}
    p{widht:500px; height:500px; margin:0px; padding:0px;border:2px solid red;color:#000;}
</style>

<select id="item_select" name="item">
    <option value="1">red</option>
    <option value="2">blue</option>
    <option value="3">green</option>
</select>

<button>Click to create divs</button>
<p id="ptest"></p>

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

$("button").click(function() {
    var myDiv = $('<div id=lar' + dividcount + ' class=aaa></div>');
    $(myDiv).appendTo('#ptest');

    dividcount++;
});

$('div').live('click', function() {

    $('div').removeClass('selected');
    $('div').html('');

    $(this).addClass('selected');
    $(this).html('div #' + this.id);
});

$('select').change(function() {
    $('div').each(function() {
        if ($(this).hasClass('selected')) {
            var str = $("select option:selected").text();
            $(this).css("background-color", str);
        }
    });
});
</script>

1 个答案:

答案 0 :(得分:2)

该事件被绑定到div元素,因此如果您点击任何其他元素,它将不会被触发。但我可能更喜欢使用委托功能。

var $ptest = $('#ptest');
$($ptest).delegate("div", 'click', function() {

    $('div', $ptest).removeClass('selected');
    $('div', $ptest).html('');

    $(this).addClass('selected');
    $(this).html('div #' + this.id);
});

这会将点击事件限制为在#ptest元素内创建的div。并且$('div', $ptest).html('');确保#ptest之外的div不受清空操作的影响。

您可以在此fiddle中看到工作示例。