我有以下有效的代码:
$(document).ready(function() {
var xhr = false;
func_two();
$('.button_one').click( function(event) {
event.preventDefault();
if ($("#textbox_one").val().length > 0) {
func_one( $("#textbox_one").val() );
} else {
func_two();
}
});
function func_one( phrase ) {
xhr = $.ajax({
type: 'POST',
url: 'url here',
data: '{phrase: "' + phrase + '"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function( data ) {
$("#inner_div").empty();
if( data.d[0] ) {
$.each( data.d, function( index, row ) {
$("#inner_div").append( "dynamic data goes here" );
});
}
}
});
}
function func_two() {
$('#inner_div').empty().append( "static data goes here" );
}
});
这很好用,因为我直接指定哪些标签会产生影响以及哪些标签会受到影响。问题是这些 div 实际上是小部件或小工具,我需要允许用户在任何给定时间在屏幕上拥有超过 1 个这些小部件或小工具。当我尝试这样做时,事情似乎完全出错了,因为“我假设”控件和 div 使用了 id。
因此,我尝试改用类,这似乎可以在此处的测试代码中使用:
$(this).closest('.main_div').find('.sub-div').text("data goes here");
但是,当我尝试将此代码应用于上面的原始代码时,它似乎不起作用。它给了我一个Cannot call method 'closest' of undefined
根据 Chromium 的开发者工具。
我尝试过的似乎不起作用的代码如下所示:
$(document).ready(function() {
var xhr = false;
func_two();
$('.button_one').click( function(event) {
event.preventDefault();
if ($("#textbox_one").val().length > 0) {
func_one( $(this), $("#textbox_one").val() );
} else {
func_two( $(this) );
}
});
function func_one( that, phrase ) {
xhr = $.ajax({
type: 'POST',
url: 'url here',
data: '{phrase: "' + phrase + '"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function( data ) {
$("#inner_div").empty();
that.closest('.outer_div').find('.inner_div').empty();
if( data.d[0] ) {
$.each( data.d, function( index, row ) {
that.closest('.outer_div').find('.inner_div').append( row.column );
});
}
}
});
}
function func_two( that ) {
that.closest('.outer_div').find('.inner_div').append( "static data goes here" );
}
});
HTML 看起来像这样
<div class="outer_div">
<div class="inner_div">
results go here
</div>
<div class="footer_div">
<input type="button" class="button_one" />
</div>
</div>
有人可以帮我将测试代码实现到原始代码中吗?