下面的代码假设我们点击的元素是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>
答案 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中看到工作示例。