2015-06-09 2 views
-1

Я работаю над веб-приложением, и мне нужно настроить высоту диалога выбора людей. В настоящее время, чтобы стрелять сценарий, когда пользователь открыть/закрыть окно, я установить таймер (2 секунды для сценария для запуска), следующим образом: -Могу ли я определить ссылку с изображением с определенным href

var interval = null; //Defines the start interval variable 

$(document).ready(function() { // jQuery needed for this 
    /* People Picker Fix Starts */ 
    if (navigator.appVersion.indexOf("MSIE 10") > -1) { // IE 10 Specific condition for People Picker Bug 
     interval = setInterval(adjustPeoplePicker, 2000); 
    } 
    /* People Picker Fix Ends */ 
}); 

function adjustPeoplePicker() { 
    if ($('.ms-dlgFrame').contents().find('#resultcontent').length > 0) { 
     $('.ms-dlgFrame').contents().find('#resultcontent').css('height', '350px'); 
     $('.ms-dlgFrame').contents().find('#MetadataTreeControlTreeSearch').css('height', '350px'); 
     //clearInterval(interval); 
    } 
} 

вот realted разметки для диалога, чтобы открыть : -

<a id="ctl00_ctl41_g_a4fb58d0_ad0d_40cf_a4a3_ccabea410e43_ff141_ctl00_ctl00_UserField_browse" href="javascript:" onclick="__Dialog__ctl00_ctl41_g_a4fb58d0_ad0d_40cf_a4a3_ccabea410e43_ff141_ctl00_ctl00_UserField(); return false;" title="Browse"> 
<img alt="Browse" src="/_layouts/15/images/addressbook.gif" title="Browse"> 
</a> 

поэтому мой вопрос, если я могу стрелять сценарий только тогда, когда пользователь нажимает на <a>, которые имеют <imag> внутри него, где ека src = addressbook.gif, а продолжают стрелять скрипт каждые 2 секунды ??

+2

Да вы можете. Вам просто нужно изменить свой код. – putvande

+0

так что вы можете больше пообщаться об этом, пожалуйста? как изменить селектор? –

+0

Удалите функцию интервала и добавьте обработчик onclick, который проверяет, имеет ли в теге 'a'nchor изображение с указанным источником. Вы пытались попробовать? – putvande

ответ

2
$('a img').on('click', callScriptForImage); 

.... 
// it is executed every time, but will call function adjustPeoplePicker() 
// only if src attribute includes addressbook.gif, as you asked 
function callScriptForImage(e){ 
    var src = $(this).attr('src'); 
    // read image src attribute 
    if(/addressbook\.gif/.test(src)){ 
    // if src attribute includes addressbook.gif, call function 
    adjustPeoplePicker(); 
    } 
} 

Вы также можете слушать за клики на изображении, которые имеют что src атрибут с:

$('a img[src$="addressbook.gif"]').on('click', adjustPeoplePicker); 

Таким образом, это намного чище.

+0

, но в этом случае функция callScriptForImage будет вызываться всякий раз, когда пользователи нажимают на любую ссылку, имеющую любой образ, могу ли я контролировать это больше? –

+0

Да, это будет вызывать при каждом нажатии любого изображения, но это то, о чем вы просите. Как вы задали вопрос, вы запрашиваете код для проверки и выполнения кода в любое время, когда нажимается изображение, которое имеет адрес «addressbook.gif» как src. Разве это не так? –

+0

Ну, на самом деле вопрос просит запустить сценарий по щелчкам на тегах, которые содержат тег img с указанной частью src. Здесь клик установлен на тег img, который может - но не может - привести к нежелательному поведению. – Lain

1

Я предполагаю, что вы просите, чтобы проверить, является ли <img>src = addressbook.gif и НЕ href из <a>?

Если это так, то это должно работать для вас:

$('a img').on('click', function() { 
    //Check to see if if the href matches addressbook.gif 
    var src = $(this).attr('src'); 
    var regex = /addressbook\.gif/i; 
    if (regex.test(src)) { 
     // Execute your code here. 
    } else { 
     //Put anything else you want here 
    } 
}); 

Надеется, что это помогает!

JRad Плохой

+0

yes u правильно я имею ввиду src not href (я обновил свой вопрос). но внутри скрипта ur функция будет вызываться всякий раз, когда пользователи нажимают на любую ссылку, у которой есть образ, так что могу ли я это контролировать? –

+0

Как указано выше, вы запрашиваете href изображения. Единственный способ обойти это - вместо этого использовать атрибут id и просто прикрепить jQuery к этому id. Я обновлю ответ, чтобы отразить это. –

+0

ok, но ваш написал src == 'addressbook.gif', но источник не будет именно addressbook.gif он закончится этим, а не точное совпадение - это правильно? –

1
<html> 
    <head> 
     <script> 
      function setClick(){ 
       var tL = document.querySelectorAll("img[src*='addressbook.gif']"); //Getting all images which src contains addressbook.gif 
       for(var i=0, j=tL.length;i<j; i++){ 
        //Just to visualize 
        tL[i].style.outline = '1px solid red'; 

        //We actually click on the parent (a) and not the img so we set the click on the a tag 
        //The other tags will keep your normal onclick settings. 
        tL[i].parentNode.onclick = function(){ 
         //Put your special script for those cases. 
         //adjustPeoplePicker() //Some version of this. 
         return false 
        } 
       } 
      } 
     </script> 
    </head> 

    <body onload = 'setClick()'> 
     <a href = 'https://www.google.com'><img alt = 'Browse' src = 'https://www.google.com/images/srpr/logo11w.png' /></a> 
     <a href = 'https://www.google.com'><img alt = 'Browse' src = 'https://www.google.com/images/srpr/logo11w.png?test=addressbook.gif' /></a> 
     <a href = 'https://www.google.com'><img alt = 'Browse' src = 'https://www.google.com/images/srpr/logo11w.png' /></a> 
    </body> 
</html> 

https://jsfiddle.net/7u3m2cng/1/

+0

Хорошее решение. 'querySelectorAll()' предотвращает выполнение кода каждый раз, когда нажимается изображение, поэтому это, вероятно, то, что он будет искать в качестве решения. –

Смежные вопросы