Не могу найти JQuery найти, чтобы найти объект в иерархии

0

Должно быть простым, но я не могу это решить.

У меня есть страница со столом, внутри этой таблицы есть автозаполнение и кнопка, я хочу найти автозаполнение, когда я нажимаю кнопку и блокирую ее или включаю. Часть disable/enabled не проблема, я не могу заставить ее пересечь иерархию, чтобы найти автозаполнение в первую очередь. Вот кусок html, который у меня есть: -

<td colspan="3">
                    <fieldset class="buttons">
                    <div>
  <input class='required' style='width:400px' type='text' id='autoLook[0]' name='autoLook[0].id' value='' title='' />
  <div class='searchcontainer yui-skin-sam' id='abb890644f19d382ef69951344848d878'></div>
  <script type='text/javascript'>   var autoCompleteDataSource = new YAHOO.util.XHRDataSource("/FARTFramework/form/searchAJAX");
    autoCompleteDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
    autoCompleteDataSource.responseSchema = {
 resultNode : "result", 
 fields : [
 { key: "name" }, 
 { key: "id" }
]
};
;
    autoComplete = new YAHOO.widget.AutoComplete('autoLook[0]','abb890644f19d382ef69951344848d878', autoCompleteDataSource);
    autoComplete.queryDelay = 0;
    autoComplete.prehighlightClassName = 'yui-ac-prehighlight';
    autoComplete.useShadow = false;
    autoComplete.minQueryLength = 3;
    autoComplete.typeAhead = false;
    autoComplete.forceSelection = true;
    autoComplete.maxResultsDisplayed = 20;
    autoComplete.shadow = false;
    var itemSelectHandler = function(sType, args) {
        var autoCompleteInstance = args[0];
        var selectedItem = args[1];
        var data = args[2];
        var id = data[1];
        updateHiddenInput(id, 0, 'forms')   };
    autoComplete.itemSelectEvent.subscribe(itemSelectHandler);
</script>
</div>

                        <input type="button" id="EnableDisable" value="Edit" onclick="enabledisable($(this))" />

                        <input type="hidden" class="required" id="forms[0]" name="forms[0].id" value="" />          
                        <input type="hidden" class="required" id="oldvalue[0]" name="oldvalue[0].id" value="" />
                        <input type="button" value="Remove Form" onclick="globalRemoveRow($(this),'forms')" />
                        <input type="button" value="Insert New Form Above" onclick="addRowWithin('/FARTFramework/testScenario/ajaxNewFormFragment',$(this))" />
                        <input type="button" value="Go to Form Definition" onclick="gotoNew('/FARTFramework/form/edit/',$(this))" />    
                    </fieldset>
                    <div id="hideDIV">
                        <table name="formSubTable[0]" id="formSubTable[0]">
                        </table>
                    </div>
                </td>

Кнопка, которую я нажимаю, называется "EnableDisable", и в javascript я могу это сделать:

function enabledisable(theButton){
    $thebutton = $(theButton)
    $theInput = $thebutton.closest('td')
    var myValue = $theInput.html();
    alert(myValue)  
}

Что возвращает это:

<fieldset class="buttons">
                    <div class="yui-ac">
  <input required="required" autocomplete="off" class="required yui-ac-input" style="width:400px" id="autoLook[0]" name="autoLook[0].id" value="" title="" type="text">
  <div class="searchcontainer yui-skin-sam yui-ac-container" id="af745a9597adf2dd98aeab126bc31bcb9"><div style="display: none;" class="yui-ac-content"><div style="display: none;" class="yui-ac-hd"></div><div class="yui-ac-bd"><ul><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li><li style="display: none;"></li></ul></div><div style="display: none;" class="yui-ac-ft"></div></div></div>
  <script type="text/javascript">   var autoCompleteDataSource = new YAHOO.util.XHRDataSource("/FARTFramework/form/searchAJAX");
    autoCompleteDataSource.responseType = YAHOO.util.XHRDataSource.TYPE_XML;
    autoCompleteDataSource.responseSchema = {
 resultNode : "result", 
 fields : [
 { key: "name" }, 
 { key: "id" }
]
};

Я вижу, что вход, который я хочу, является третьей строкой вниз, первый вход в этом html. Но когда я пытаюсь расширить jquery до $thebutton.closest('td').children('input').eq(0) Я получаю undefined возвращенный.

Я пробовал все сначала, потом и так далее, но не повезло. Я знаю, что вход будет иметь текст autolook [xx] в нем, но будут грузы с этим идентификатором, и я не могу сказать, какой номер будет просто искать определенный идентификатор или имя, поэтому нужно пройти html до Найди это...

Теги:

2 ответа

1
Лучший ответ

Попробуйте использовать .find()

$thebutton.closest('td').find('input[type='text'])

Или

$thebutton.closest('td').find('input')

Или

$thebutton.closest('td').find('input:first')
  • 0
    Отлично работает, используя find ('input: first'), спасибо. Я не могу поверить, что я не пробовал это, я уверен, что я сделал !!! : S
  • 0
    Добро пожаловать! Рад помочь :)
1

попробуйте изменить это:

function enabledisable(theButton){
    $thebutton = $(theButton)
    $theInput = $thebutton.closest('td')
    var myValue = $theInput.html();
    alert(myValue)  
}

к этому:

$('#EnableDisable').click(function(){
    var myValue = $(this).closest('td').find('input').val();
    alert(myValue)  
});

и ваш html изменился:

<input type="button" id="EnableDisable" value="Edit"  />
  • 0
    Спасибо за помощь, это работает, но это немного переписывает то, как я это делал (у меня более одной страницы, которая использует эту функцию, поэтому хотел сохранить ее в js, в котором я ее написал. В этом смысле решение Дхавала ближе к тому, что мне нужно, но не намного. Если бы я мог голосовать за оба, я бы! :)
  • 0
    Рад помочь вам, я показал другой способ сделать это! удачи :) @MorkPork

Ещё вопросы

Сообщество Overcoder
Наверх
Меню