JQuery Alert работает в HTML, не работает при добавлении в SharePoint CEWP - PullRequest
0 голосов
/ 15 декабря 2011

Он работает на моей скрипке http://jsfiddle.net/JustJill54/XFaaG/11/,, но не работает, когда я добавляю код jQuery в CEWP.(К сведению. Я помещаю jQuery в CEWP только для подтверждения концепции.) Разница только в том, что когда я просматриваю src в результате на скрипте, есть событие Window.Load (), поэтому я попытался добавить это событие в мой CEWP, нопредупреждение все еще не работает.

Вот код от CEWP

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(window).load(function(){

$(document).ready(function() {
    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    // Attach to the focusout event of the select, if that's when
    // you want to check the value
    $("select[title='organizationalElement']").focusout(function() {
        // Now see if it's the value you want
        if ($(this).val() === 'idk') {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } //close if
    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() !== "");
    }); //close requestType
    $("select[title='anonymous']").change(function() {
        $(".anon").toggle();
    }); //close anonymous
    $("select[title='action']").change(function() {
        $(".actDet").toggle($(this).val() !== "");
    }); //close action
    }); //close select.focusout
}); //close doc.ready
}); //close window.load
</script>

ОБНОВЛЕНИЕ: Я закомментировал всю свою логику и просто попытался получить предупреждение AN, чтобы показать, когда страница загружается, и ядо сих пор не удалось заставить его работать.

ОБНОВЛЕНИЕ2: я создал страницу .html с теми же элементами управления, что и у моей страницы SharePoint, и добавил скрипт jQuery для отображения оповещения о загрузке страницы, и даже этотработает, но страница ASPX с SharePoint: элементы управления FormField не работают.

ОБНОВЛЕНИЕ3: Я ссылался на учебник по JavaScript и исправил свой скрипт.Основное отличие состоит в том, что операторы NOT EQUAL были изменены на! =, И я прокомментировал событие Window.load.Вот мой пересмотренный скрипт:

//$(window).load(function(){

$(document).ready(function(){

    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    $("select[title='organizationalElement']").focusout(function() {

        if ($(this).val() === 'idk') {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } // close if

    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() != "");
    }); //close requestType.change

    $("select[title='anonymous']").change(function(){
      $(".anon").toggle();
    }); //close anonymous.change

    $("select[title='action']").change(function(){
        $(".actDet").toggle($(this).val()!= "");
    }); // close action.change

    });//close select.focusout

}); // close doc.ready
//}); // close window.load

UPDATE4: я использовал firebug, чтобы получить val селектора, и понял, что он не возвращает idk (как указано в значении элемента списка SP), а возвращает "Я не знаю "вместо этого.Это поднимает еще одну проблему / напоминает мне, что мне нужно избегать апостроф (') в не.В любом случае, все еще работаем над изломами ...

ОБНОВЛЕНИЕ5: @ Janis - Я не могу увидеть свой скрипт на вкладке скриптов в Firebug ... Так что я предполагаю, что это означает, что он не выполняется.

Кстати.Вот состояние скрипта после UPDATE4.

$(window).load(function(){

$(document).ready(function(){

    $("tr.reqDet").hide();
    $("tr.anon").hide();
    $("tr.actDet").hide();

    $("select[title='organizationalElement']").focusout(function() {

        if ($(this).val() === "I don\'t know") {
            alert("If no organizational element is selected, additional time may be required to route this request");
        } // close if

    $("select[title='requestType']").change(function() {
        $(".reqDet").toggle($(this).val() != "");
    }); //close requestType.change

    $("select[title='anonymous']").change(function(){
      $(".anon").toggle();
    }); //close anonymous.change

    $("select[title='action']").change(function(){
        $(".actDet").toggle($(this).val()!= "");
    }); // close action.change

    });//close select.focusout

}); // close doc.ready
}); // close window.load

Есть идеи почему?Я думал, что использую довольно общие события, которые всегда вызываются (doc.ready, window.load).

ОБНОВЛЕНИЕ 6: Боже ... НАКОНЕЦ!Угадай, 6-й раз это очарование.Я определенно собираюсь рассказать всем о том, что сработало для меня .... В любом случае, пересмотренный скрипт выглядит следующим образом:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
$(window).load(function(){  
  $(document).ready(function(){      
     $("tr.reqDet").hide();     
     $("tr.anon").hide();     
     $("tr.actDet").hide();      
   $("select[title='organizationalElement']").focusout(function() {          
     if ($(this).val() === "I don\'t know") {             
        alert("If no organizational element is selected, additional time may be required to route this request");         
     } // close if      
      $("select[title='requestType']").change(function() {         
        $(".reqDet").toggle($(this).val() != "");     
      }); //close requestType.change      
      $("select[title='anonymous']").change(function(){       
        $(".anon").toggle();     
      }); //close anonymous.change      
      $("select[title='action']").change(function(){         
        $(".actDet").toggle($(this).val()!= "");     
      }); // close action.change      
   });//close select.focusout  
  }); // close doc.ready 
}); // close window.load 
</script>

Вместо того, чтобы вставлять непосредственно в CEWP, я загружаю его в виде файла .js.в созданную мной папку с именем SiteAssets (в случае, если мы перейдем на SPD2010), и я вызываю указанный файл ... js через ссылку на контент CEWP.Использовал firebug для проверки загрузки скрипта.

Итак, некоторые вещи, которые я узнал о том, как заставить этот скрипт jQuery работать для меня на моей странице SP-

  1. Не предполагайте, что вы знаете, что возвращается val - используйтевкладка консоли firebug для получения точных результатов
  2. Проверьте свой синтаксис
  3. Даже при обращении к коду jQuery в файле ... js убедитесь, что он запускается с необходимыми тегами, поэтому вы можете завершитьс вашим скриптом, вставленным в виде текста внизу страницы. Надеюсь, это поможет!

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Попробуйте добавить приведенный выше скрипт в текстовый файл и сохраните его в библиотеке документов. Затем отредактируйте CEWP и добавьте URL файла сценария в ссылку ссылки. SharePoint любит разбирать / уничтожать код, если он вводится непосредственно в CEWP.

1 голос
/ 16 декабря 2011
  1. Попытайтесь просмотреть исходный код и посмотреть, есть ли ссылки на jQuery и действительно ли ваш код там есть.
  2. Далее вы можете использовать инструмент отладки, такой как Firebug или Chrome Inspector или инструменты разработчика Internet Explorer, еслиВы сделаете и установите точки останова, чтобы увидеть, действительно ли выполняется код, если есть какие-либо ошибки, которые мешают его выполнению.Если вы не знаете, как их использовать, изучите их, это будет долгий путь и время для устранения таких проблем.
0 голосов
/ 15 декабря 2011

Просто проверьте свою скрипку и обнаружите, что там вы делаете магию window.load, но просто удалите ее!

 $(window).load(function(){

Я попробовал ее в вашей скрипке и на моем тестировании SharePointи это работает.Просто удалите эту строку и закрывающие теги.}

* не уверен, что это сотворит волшебство, но оно работает для меня, должно сделать это для Вас *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...